我不确定如何从这些行中删除“DST =”.. 这是我的命令(它返回它应该的东西),如果有更有效的方式或更好的方式,请随意批评。
awk '{print $10}' iptables.log |sort -u
DST=96.7.49.64
DST=96.7.49.65
DST=96.7.50.64
DST=98.27.88.26
DST=98.27.88.28
DST=98.27.88.45
DST=98.27.88.50
如您所见,我需要从iptable日志中获取唯一的ip。
谢谢!
答案 0 :(得分:2)
如果你不介意未排序的输出,这是使用awk
的更好方法:
awk '!a[$10]++ { sub(/DST=/,"",$10); print $10 }' file
答案 1 :(得分:1)
您可以通过sed输出输出结果,从每行中删除DST =:
awk '{print $10}' iptables.log | sed 's/^DST=//' | sort -u
答案 2 :(得分:1)
或者你可以将它全部保存在一个过程中,并使用awk的等效sub()
函数,即
awk '{sub(/DST=/,"",$10); print $10}' iptables.log |sort -u
<强>更新强>
无论如何只能在DST上键入=无论它是在空间10还是11?
awk '$10~/^DST=/{sub(/DST=/,"",$10); print $10};$11~/^DST=/{sub(/DST=/,"",$11); print $11}' iptables.log | sort -u
OR
awk '{for (i=9;i<13;i++) {
if ($i ~ /^DST=/) { sub(/DST=/, "", $i); print $i}
}
}' iptables.log | sort -u
请注意,在这里,您可以更改要检查和打印的字段范围,我只是测试字段9-12。 awk中的变量如$i
引用当前行中的i'th'
元素,就像$ 1,$ 9,$ 87等等。
由于我没有iptables.log来测试,我无法测试它,除非确认awk语法没有失败。这不起作用,请发布2-4行简化数据。
IHTH
答案 3 :(得分:1)
awk '{split($10,a,"=");b[a[2]];next}END{for(i in b)print i}' iptables.log