正如标题所说,我想在第3列中找到第3列中每个特定值的最高值。然后我想打印出第2列,其中包含具有ip-address的第3行,第3列包含错误代码。
我的代码:
cat $NAME |awk '{print $1, $9}' | sort -k 1 -k 2 | uniq -c | sort -k 3
忘记提及我们正在打开一个日志文件,我们将其放入变量' NAME"并且在日志文件中有超过9列。 9指的是服务器响应代码。这是日志文件中一行的示例:
127.0.0.1 - stefan [01 / Apr / 2002:12:17:10 +0200]" GET / HTTP / 1.1" 200 301"" " Mozilla / 5.0(兼容; Konqueror / 2.2.2-2; Linux)"
答案 0 :(得分:0)
忽略您的代码段,这似乎与您对问题的描述完全无关(我不理解$9
的存在),我想您想要:
sort -s -k3,3 -k1,1r $NAME | awk '$3 != l{print $2, $3; l=$3}'
第3列中的所有特定值都出现在连续组中。然后,辅助密钥(-k1,1r
)对第一列中出现最高值的每个组进行排序。然后每次在第3列中出现新值时,awk通过打印第2列和第3列来打印每组的第一行。