1. ホーム
  2. bash

[解決済み] awk で行を飛ばすにはどうしたらいいですか?

2022-02-18 15:12:59

質問

このようなコマンドがあります。

tac $log | awk -v pattern="test" '$9 ~ pattern {print; exit}'

最後の行が表示され、その中に $9 には test テキストを表示します。

こんな感じ。

Thu Mar 26 20:21:38 2015 1 10.8.0.22 94 /home/xxxyyy/zzz_test_223123.txt b _ o r spy ftp 0 * c
Thu Mar 26 20:21:39 2015 1 10.8.0.22 94 /home/SAVED/zzz_test_123123.txt b _ o r spy ftp 0 * c
Thu Mar 26 20:21:40 2015 1 10.8.0.22 94 /home/xxxyyy/zzz_test_123123.txt b _ o r spy ftp 0 * c
Thu Mar 26 20:21:41 2015 1 10.8.0.22 94 /home/SAVED/zzz_test_123124.txt b _ o r spy ftp 0 * c

-- >

Thu Mar 26 20:21:41 2015 1 10.8.0.22 94 /home/SAVED/zzz_test_123124.txt b _ o r spy ftp 0 * c

このコマンドは、最後の行を表示します。しかし、私はその行に SAVED . そこで、このように表示する必要があります。

Thu Mar 26 20:21:40 2015 1 10.8.0.22 94 /home/xxxyyy/zzz_test_123123.txt b _ o r spy ftp 0 * c

どうすればいいのでしょうか?

どのように解決するのですか?

別の条件を追加することができます。 !~ この2つ目のパターンにマッチしないようにするため(私は pattern2 をハードコードすることができます。 SAVED があります)。

$9 ~ pattern && $9 !~ pattern2

全員集合

$ awk -v pattern="test" -v pattern2="SAVED" '$9 ~ pattern && $9 !~ pattern2 {print; exit}'
Thu Mar 26 20:21:40 2015 1 10.8.0.22 94 /home/xxxyyy/zzz_test_123123.txt b _ o r spy ftp 0 * c