Debe usar la opción unzip
's -c
para descomprimir el contenido del archivo.zip a la salida estándar.... de lo contrario, descomprimirá el archivo (s )en el archivo.zip en el disco, y no habrá nada a lo que canalizar awk
.
Al igual que muchos programas que se originaron en MS -DOS/Windows en lugar de Unix, unzip
también habla mucho sobre lo que está haciendo. Los programas de Unix generalmente no hacen eso hasta que usted les dice explícitamente que lo hagan con una opción -v
o --verbose
o --debug
o similar. Es una diferencia cultural significativa entre dos/windows y el software de Unix. y programadores.
Desde el punto de vista de cualquier programa que recibe entrada en stdin, es casi seguro que es basura que lo confundirá (es por eso que los programas de Unix no son detallados a menos que les diga que lo sean ). Así que dile a unzip
que "simplemente cállate y ponte a trabajar" con la opción-q
(silenciosa )o-qq
(extra silenciosa ).
por ej.
unzip -qq -c log.zip | awk -F'- -' '{print $1, $2}' >newfile
Por cierto, he cambiado ligeramente tu script awk
. Arreglé el error de sintaxis pring
. Además, el separador de campo de salida predeterminado(OFS
)en awk
es un solo espacio... incluso si configura el separador de campo de entrada(FS
)en otra cosa (, p. con-F'- -'
). Así que simplemente imprimí$1,$2
-sin necesidad de usar un carácter de espacio entre comillas doble -.
#!/bin/sh
ps aux >ps-out.old
sleep 180
ps aux >ps-out.new
diff -u ps-out.old ps-out.new | grep '^[+-]'
Это выполняет ps aux
и сохраняет результат в файл. Затем он ждет три минуты, прежде чем повторить то же самое. Затем он использует diff
, чтобы получить различия между двумя наборами выходных данных из ps
, и grep
, чтобы получить только строки в выходных данных diff
, которые были добавлены или удалены.