我正在尝试根据多个文件的条件对行进行计数,然后进行摘要。条件的值大于 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
但是这段代码也会计算标头,而我一直在研究如何汇总所有文件。
最初
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