Responde a los siguientes apartados:
(0’5 puntos) Ejecuta en Ubuntu la orden
ps waxu | cut -c 1-80 >> /tmp/procesos.txt
Describe qué hace esa orden.
psmuestra información sobre los procesos, es decir, los programas que se están ejecutando en el ordenador.waxuson las opciones deps; por omisión,psmuestra pocos procesos; conwaxuaparecen muchos más.|es un tubo, lo que significa que la salida del comandopsse convierte en la entrada decut.cutes un comando que se queda con parte de la información de cada renglón que le entra; en este caso, la opción-cindica que se queda con ciertos caracteres, en concreto, los 80 primeros, por el recorrido indicado como1-80.>>indica redirección no destructiva, es decir, la salida decutse almacenará en el fichero indicado y, si ya existía dicho fichero, su contenido no se borra, sino que la nueva salida se añade a lo que había./tmp/procesos.txtes una ruta absoluta que apunta al ficheroprocesosde tipo textotxtalbergado en la carpetatmpdel directorio raíz/.
- (1 punto) Haz una estadística descriptiva univariante de las columnas contenidas en /tmp/procesos.txt
- El fichero contiene campos separados por espacios, por lo que en principio sería conveniente cargarlo en R
mediante
read.table. - Contiene un renglón de cabecera, por lo que habría que emplear la opción
header=TRUEderead.table. - Se produce el error:
more columns than column names. - La última columna,
COMMAND, contiene comandos que pueden incluir espacios. Posibles formas de soslayarlo:Sustituyendo esos espacios por otro símbolo:
cat /tmp/procesos.txt | cut -c 1-65 > /tmp/procesos-izq.txt cat /tmp/procesos.txt | cut -c 66- | tr " " "_" | sed 's/_/ /' > /tmp/procesos-der.txt paste -d"\0" /tmp/procesos-izq.txt /tmp/procesos-der.txt > /tmp/procesos.ssv
Leyendo el fichero con
header=FALSE:p <- read.table("/tmp/procesos.txt", header=FALSE, fill=TRUE) p$V11 <- paste(p$V11, p$V12, p$V13) p$V12 <- p$V13 <- NULL names (p) <- trimws (as.character (p[1,])) p <- p[-1,]
- Descriptiva univariante:
- Hay 71 registros (individuos, procesos) y 11 campos (variables)
USERvariable cualitativa nominaltail (sort (table (p$USER)))
PIDson números enteros que no se repiten (identificadores de procesos)all (table(p$PID) == 1) # es verdadero summary (as.numeric (p$PID))
%CPUson números reales positivos pequeños en generalsummary (as.numeric (p$"%CPU")) # de 0,0 a 2,4
%MEMsimilar aunque algo mayoressummary (as.numeric (p$"%MEM")) # de 0,0 a 9,9
VSZson números enteros grandessummary (as.numeric (p$VSZ))
RSSídemsummary (as.numeric (p$RSS))
TTes cualitativa nominal y su moda es el extraño valor??tail (sort (table (p$TT)))
STATes cualitativa nominal con 19 categoríassort (table (p$STAT))
STARTEDes la hora de inicio de cada procesosummary (as.POSIXct (p$STARTED, format="%H:%M%p"))
TIMEes el tiempo que lleva ejecutándose un procesotiempos <- as.POSIXlt(p$TIME, format="%M:%OS") summary (tiempos$min * 60 + tiempos$sec)
COMMANDes el programa ejecutado (entre ellos estáps -waxu)
- El fichero contiene campos separados por espacios, por lo que en principio sería conveniente cargarlo en R
mediante
(0’5 puntos) Haz una gráfica de barras con la salida de
shuf -r -i 1-6 -n 10000shuf -r -i 1-6 -n 10000 | sort -n | uniq -c # barplot en R con esos valores
(0’5 puntos) Describe estadísticamente la salida de
shuf -r -i 1-999 -n 100 | xargs -I'{}' date -Im -d '{}'daysGenera cien fechas al azar desde mañana a dentro de 999 días (casi tres años):
system ("shuf -r -i 1-999 -n 100 | xargs -I'{}' date -Im -d '{}'days > /tmp/salida") summary (as.POSIXct (readLines ("/tmp/salida")))
(0’5 puntos) Crea el fichero
/tmp/passwdque sea igual que/etc/passwdpero ordenado numéricamente por el tercer campo.sort -n -t':' -k3 -o /tmp/passwd /etc/passwd
En R, se podría hacer algo como
a <- read.table("/etc/passwd", sep=":") b <- a[order(as.numeric(a[,3])),] write.table(b, "/tmp/passwd", sep=":")