Linux下如何根据条件统计多个文件的行数

问题描述 投票:0回答:1

我正在尝试根据多个文件的条件对行进行计数,然后进行摘要。条件的值大于 60。

> sample1.txt

name  value
A001     27
A002     54
A003     39
A004     81
A005     88


> sample2.txt

name  value
B001     46
B002     92
B003     79
B004     67
B005     66

> sample3.txt

name  value
C001     12
C002     39
C003     83
C004     79
C005     27

所需输出:

   file  Count
sample1      2
sample2      4
sample3      2

我已经尝试过:

awk '$2>60{c++} END{print c+0}' sample1.txt

但是这段代码也会计算标头,而我一直在研究如何汇总所有文件。

linux shell command
1个回答
0
投票

最初

awk
不知道$2是数字还是字符串。

此后您只有一个计数器

c
,这将导致脚本末尾只有一个计数。 为了避免这种情况,您可以使用一个以
FILENAME
作为索引的数组来计算每个文件的每个值。

脚本.awk :

$2+0>60{a[FILENAME]++} 
END{
    print "file", "count"
    for(key in a) print key, a[key]
}

如果您需要总计,可以在脚本的第一部分或末尾的

for
循环中添加计数器。在下面的这些示例中,
c
将相等。

$2+0>60{a[FILENAME]++} 
END{
    print "file", "count"
    for(key in a){
        print key, a[key]
        c+=a[key]
    }
    print "total", c
}

$2+0>60{a[FILENAME]++; c++} 
END{
    print "file", "count"
    for(key in a) print key, a[key]
    print "total", c
}

您可以将它们用作脚本:

awk -f script.awk sample1.txt sample2.txt sample3.txt
© www.soinside.com 2019 - 2024. All rights reserved.