我有这样的命令:
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
我该怎么做?
答案 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; }