计算文本文件中与其国家/地区对应的特定字符串

计算文本文件中与其国家/地区对应的特定字符串

我有一个文本文件,其中的字段由制表符分隔,包含:

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打印每一行及其重复计数。
  • 最后将grepfor 模式做为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] } }

相关内容