我有一个这样的命令:
tac $log | awk -v pattern="test" '$9 ~ pattern {print; exit}'
Run Code Online (Sandbox Code Playgroud)
$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
Run Code Online (Sandbox Code Playgroud)
-->
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
Run Code Online (Sandbox Code Playgroud)
该命令显示了最后一行。但如果线路有的话我需要通过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
Run Code Online (Sandbox Code Playgroud)
我怎样才能做到这一点?
Mar*_*rot 10
要跳过一行,您可以匹配它,然后使用该next命令。
$9 ~ /SAVED/ { next }
$9 ~ /\.txt$/ { print; exit }
Run Code Online (Sandbox Code Playgroud)
您可以添加另一个条件!~来防止第二个模式匹配(我用pattern2它来使其更通用,当然您可以SAVED在那里进行硬编码):
$9 ~ pattern && $9 !~ pattern2
Run Code Online (Sandbox Code Playgroud)
全部一起:
$ 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
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
9815 次 |
| 最近记录: |