Lassen Sie uns sagen, dass ich eine Datei, die wie folgt aussieht:Shell Scripting und regulären Ausdrücken (? Sed, awk, grep ...)
user ID time started time ended yes/no
3523 15:00 0 yes
2356 12:13 12:18 yes
4690 09:10 0 no
Ich möchte Shell-Skript schreiben, die alle das herausgreifen wird Zeilen in der Datei, die haben eine Zeit von '0' und 'ja' beendet.
Für dieses Beispiel würde es die erste Zeile nur sein:
3523 15:00 0 yes
arbeiten Wow, ich war nicht klar, wie einfach dies zu tun ist awk. Als Nebenfrage vor der Druckanweisung muss man END schreiben? –
Werfen Sie einen Blick auf die Manpage für awk. Ein awk-Skript ist im Grunde eine Liste von CONDITION ACTION-Paaren. In diesem Fall lautet die Bedingung $ 3 = 0 und $ 4 = yes. Die entsprechende Aktion ist Drucken. END ist eine Bedingung, die nach dem Lesen der letzten Zeile der Datei erfüllt ist. Alle danach getätigten Aktionen werden nur am Ende der Datei ausgeführt. An diesem Punkt wird für den Druck keine Zeile mehr angezeigt. In der Praxis hätten andere Klauseln Werte in Globals gespeichert, auf die die END-Aktionen zurückgreifen können. – jtdubs
Wenn Sie mit awk vertraut sind, möchten Sie vielleicht den '{print}' body entfernen (was die Standardaktion ist): 'awk '$ 3 == 0 && $ 4 ==" ja "' Datei' –