Risposte:
Potresti usare awk
per quello.
command | awk '{ if (/pattern/) { print > "match" } else { print > "nomatch" } }'
>
stampa tutto l'output sul file, sovrascrivendo i file esistenti. Non viene valutato in modo tale da generare nuove righe che sovrascrivono l'output precedente dalla stessa istanza di awk
. Cioè, se ci sono più corrispondenze, il file "corrispondenza" conterrà ogni corrispondenza separata da OFS
. La differenza tra >
ed >>
esiste nel trattamento dei file esistenti.
Ecco un sed
esempio:
Nota: il w
comando sed sed sovrascriverà un file esistente ogni volta che viene eseguito lo script, ma solo se viene attivato quel particolare comando write; quindi ilrm
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
Puoi aggiungere file in awk:
awk '{if (/pattern/) print >>"matched"; else print >>"unmatched"; }
o più corto:
awk '{print >>(/pattern/?"matched":"unmatched")}'
awk
ma a che punto valuta>
? Se viene valutato ogni volta che si applica il condizionale,