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.
ps
muestra información sobre los procesos, es decir, los programas que se están ejecutando en el ordenador.waxu
son las opciones deps
; por omisión,ps
muestra pocos procesos; conwaxu
aparecen muchos más.|
es un tubo, lo que significa que la salida del comandops
se convierte en la entrada decut
.cut
es un comando que se queda con parte de la información de cada renglón que le entra; en este caso, la opción-c
indica 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 decut
se 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.txt
es una ruta absoluta que apunta al ficheroprocesos
de tipo textotxt
albergado en la carpetatmp
del 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=TRUE
deread.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)
USER
variable cualitativa nominaltail (sort (table (p$USER)))
PID
son números enteros que no se repiten (identificadores de procesos)all (table(p$PID) == 1) # es verdadero summary (as.numeric (p$PID))
%CPU
son números reales positivos pequeños en generalsummary (as.numeric (p$"%CPU")) # de 0,0 a 2,4
%MEM
similar aunque algo mayoressummary (as.numeric (p$"%MEM")) # de 0,0 a 9,9
VSZ
son números enteros grandessummary (as.numeric (p$VSZ))
RSS
ídemsummary (as.numeric (p$RSS))
TT
es cualitativa nominal y su moda es el extraño valor??
tail (sort (table (p$TT)))
STAT
es cualitativa nominal con 19 categoríassort (table (p$STAT))
STARTED
es la hora de inicio de cada procesosummary (as.POSIXct (p$STARTED, format="%H:%M%p"))
TIME
es el tiempo que lleva ejecutándose un procesotiempos <- as.POSIXlt(p$TIME, format="%M:%OS") summary (tiempos$min * 60 + tiempos$sec)
COMMAND
es 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 10000
shuf -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 '{}'days
Genera 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/passwd
que sea igual que/etc/passwd
pero 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=":")