我有一个文本文件,其中的字段由制表符分隔,包含:
Baseball Korea
Badminton Spain
Soccer Germany
Baseball Korea
Badminton Spain
Badminton Korea
我想做的是将一项特定的运动与其所在的国家/地区一起计算。例如我想查找羽毛球所以它会产生
Korea 2
Spain 3
我正在使用 awk 脚本来执行此操作,但我在计数时遇到问题
awk 'BEGIN {FS = '\t'} {for country in $2) if ($1 ==
'Badminton') count [$1]++} END {print (country), count
[$1]}' Sport.txt
答案1
单程:
$ awk 'x==$1{a[$2]++;}END{for(i in a){print i, a[i];}}' x='Badminton' file
Korea 1
Spain 2
如果第一列值为“羽毛球”,则增加关联数组中的计数器。并在文件末尾打印数组内容。
答案2
简单地。
grep Badminton <(uniq -c <(sort infile))
1 Badminton Korea
2 Badminton Spain
- 首先是
sort
文件infile
。 - 然后
uniq
打印每一行及其重复计数。 - 最后将
grep
for 模式做为Badminton
。
答案3
这将实现您既定的目标
awk -v sport=Badminton -F $'\t' '$1 == sport { country[$2]++ } END { for (c in country) { printf "%s\t%d\n", c, country[c] } }' Sport.txt
使用示例Sport.txt
文件的结果
Korea 1
Spain 2
解释
# Set the awk variable 'sport' and the field separator as a tab, and read the file
awk -v sport=Badminton -F $'\t' '...code...' Sport.txt
# If the first field matches, increment the count for this country
$1 == sport { country[$2]++ }
# When there is no more input, print out each country and its count
END { for (c in country) { printf "%s\t%d\n", c, country[c] } }