Contando uma string específica em um arquivo de texto correspondente a seu país

1

Eu tenho um arquivo de texto, com campos separados por uma guia, contendo:

Baseball        Korea
Badminton       Spain            
Soccer          Germany
Baseball        Korea
Badminton       Spain
Badminton       Korea

E o que estou tentando fazer é contar um esporte específico com seu país. Por exemplo, eu quero procurar o badminton para produzir

Korea   2
Spain   3

Estou usando um script awk para fazer isso, mas estou tendo problemas com a contagem

awk 'BEGIN {FS = '\t'} {for country in $2) if ($1 ==   
'Badminton') count [$1]++} END {print (country), count 
[$1]}' Sport.txt
    
por Maxxx 19.10.2017 / 10:17

3 respostas

1

Um caminho:

$ awk 'x==$1{a[$2]++;}END{for(i in a){print i, a[i];}}' x='Badminton' file
Korea 1
Spain 2

Se o valor da primeira coluna for 'Badminton', incremente o contador na matriz associativa. E no final do arquivo, imprima o conteúdo da matriz.

    
por 19.10.2017 / 10:23
1

Simplesmente.

grep Badminton <(uniq -c <(sort infile))
1 Badminton         Korea
2 Badminton         Spain
  • Primeiro sort o arquivo infile .
  • Em seguida, uniq e imprima cada linha e suas contagens duplicadas.
  • Por último, faça o grep do padrão como Badminton .
por 19.10.2017 / 10:45
1

Isso alcançará seu objetivo declarado

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

Resultados usando seu exemplo Sport.txt file

Korea   1
Spain   2

Explicação

# 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] } }
    
por 19.10.2017 / 10:26