Respuestas:
Podrías usar awk
para eso.
command | awk '{ if (/pattern/) { print > "match" } else { print > "nomatch" } }'
>
imprime todos los resultados en el archivo, sobrescribiendo los archivos existentes. No se evalúa de tal manera que dará como resultado que las líneas nuevas sobrescriban la salida anterior de la misma instancia de awk
. Es decir, si hay varias coincidencias, el archivo "coincidencia" contendrá cada coincidencia separada por OFS
. La diferencia entre >
y >>
existe en el tratamiento de archivos existentes.
Aquí hay un sed
ejemplo:
Nota: el w
comando de sed sobrescribirá un archivo existente cada vez que se ejecute el script, pero solo si se activa ese comando de escritura en particular; por lo tanto, larm
rm -f file-{yes,not}
sed -ne '/pattern/bY; w file-not' -e 'b; :Y; w file-yes' file
sed -n '/PATTERN/p;//! w file-not' infile >file-yes
Puede agregar archivos en awk:
awk '{if (/pattern/) print >>"matched"; else print >>"unmatched"; }
o más corto:
awk '{print >>(/pattern/?"matched":"unmatched")}'
awk
pero ¿en qué punto evalúa el>
? Si se evalúa cada vez se aplica el condicional, que acabaría con dos archivos de una sola línea ...