Awk Bourne shell脚本,在第1列中查找第3列中特定值的最大值

Awk Bourne shell脚本,在第1列中查找第3列中特定值的最大值,awk,sh,Awk,Sh,正如标题所说,我想在第1列中找到第3列中每个特定值的最高值。然后,我想打印出第2列的ip地址,第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

正如标题所说,我想在第1列中找到第3列中每个特定值的最高值。然后,我想打印出第2列的ip地址,第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)”

忽略您的代码片段,它似乎与您对问题的描述完全无关(我不理解
$9
的存在),我认为您需要:

sort -s -k3,3 -k1,1r $NAME | awk '$3 != l{print $2, $3; l=$3}'

第3列中的所有特定值显示在连续的组中。辅助键(
-k1,1r
)然后对每个组进行排序,第一列中的最大值首先出现。然后,awk通过每次在第三列中出现新值时打印第二列和第三列,只打印每个组的第一行。

从哪里获得九个(
9
)值(例如
$9
)从索引、IP地址和服务器响应代码(如果您的字段分隔符是默认的)(如果您的输出反映了您的输入,那么将提供最多
3
)忘记提到我们正在打开一个日志文件,我们将其放入变量“NAME”中,日志文件中有9列以上。9引用了服务器响应代码。我输入的代码就是图片上的输出,我忘了提到我有一个日志文件,我们先打开它。$9引用的是日志文件中的服务器响应代码。您的预处理毫无意义,因为它只生成2列。那么你怎么会对第3列有疑问呢?我将你的代码添加到我的代码中,效果很好,我唯一做的更改是从sort-s改为sort-g。谢谢你的帮助!