bash脚本如何过滤最多计算的第一行var

时间:2012-01-04 16:36:01

标签: bash

如何过滤目录下所有文件中计数最多的第一行var(还应检查其他目录)? 我想找到我文件中的所有行(我希望pwd下的许多文件夹中的所有文件)第一个变量,其中第一个var显示的次数最多

我试图像这样使用awk

awk -f : { print $1} FILENAME

编辑: 我将解释目的: 我有一个服务器,我想过滤他的日志因为我有一个IP,每天重复100次第一个变量行是IP 我想找到什么是重复问题的ip:我有两个服务器因此通过检查一个日志100次来检查这将不会有效我希望这个脚本将帮助我找出重复的IP ... < / p>

2 个答案:

答案 0 :(得分:2)

您应该重写您的问题以使其更清晰。我知道你想知道哪一行在一组文件中最常见。为此,我会用这个:

head -qn 1 * | sort | uniq -c | sort -nr

head打印当前目录中每个文件的第一行。 -q导致它不打印文件的名称; -n允许您指定行数。)

sort按排序顺序对它们进行分组。

uniq -c计算出现次数,即前一次排序后每个块中重复行的数量。

sort -r以最受欢迎的第一个命令他们。 -r意味着逆转;默认情况下,它按升序排序。

答案 1 :(得分:0)

不确定,如果这有帮助的话。问题不是那么清楚。

尝试这样的事情会有所帮助。

find . -type f -name "*.*" -exec head -1 {} \; 2>/dev/null | awk -F':' 'BEGIN {max=0;}{if($2>max){max=$2;}}END{print max;}'

find - 尝试使用任何名称和扩展名(type f)查找当前目录中的所有文件,直到结束(*.*)并获取每个文件的第一行。

awk - 将字段分隔符设置为:(-F:)并在处理第一行BEGIN之前将max设置为0。 获取第二个字段:($2)检查是否$2 > current_max_value。如果是,则将当前字段设置为新的最大值。 在处理结束时,所有行(当前目录下所有文件的第一行)END将打印最大值。