我怎样才能跳过awk

时间:2015-04-24 08:27:35

标签: bash awk

我有这样的命令:

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

此命令显示最后一行。但是我需要传递if line 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

我该怎么做?

3 个答案:

答案 0 :(得分:4)

您可以添加其他条件!~以防止匹配第二个模式(我使用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

答案 1 :(得分:3)

要跳过一行,您可以匹配它,并使用next命令。

$9 ~ /SAVED/ { next }
$9 ~ /\.txt$/ { print; exit }

答案 2 :(得分:3)

使用!〜测试一条线是否与图案不匹配。

awk -v pattern="test" $9 ~ pattern && $9 !~ /SAVED/ { print; exit; }