Odpowiedzi:
Możesz awk
do tego użyć .
command | awk '{ if (/pattern/) { print > "match" } else { print > "nomatch" } }'
>
drukuje wszystkie dane wyjściowe do pliku, zastępując istniejące pliki. Nie jest analizowany w taki sposób, że spowoduje to, że nowe wiersze zastąpią stare dane wyjściowe z tego samego wystąpienia awk
. Oznacza to, że jeśli istnieje wiele dopasowań, plik „dopasuj” będzie zawierał każde dopasowanie oddzielone OFS
. Różnica pomiędzy >
i >>
istnieje w leczeniu istniejących plików.
Oto sed
przykład:
Uwaga: w
polecenie sed zastąpi istniejący plik za każdym razem, gdy skrypt jest uruchamiany, ale tylko wtedy, gdy zostanie uruchomione to konkretne polecenie zapisu; stądrm
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
Możesz dołączyć pliki w awk:
awk '{if (/pattern/) print >>"matched"; else print >>"unmatched"; }
lub krócej:
awk '{print >>(/pattern/?"matched":"unmatched")}'
awk
ale w którym momencie to ocenia>
? Jeśli jest oceniany za każdym razem, gdy warunek ma zastosowanie, skończyłbyś z dwoma plikami