해당 국가에 해당하는 텍스트 파일의 특정 문자열 수를 계산합니다.

해당 국가에 해당하는 텍스트 파일의 특정 문자열 수를 계산합니다.

다음을 포함하는 탭으로 구분된 필드가 있는 텍스트 파일이 있습니다.

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

첫 번째 열 값이 "Badminton"이면 연관 배열의 카운터를 증가시킵니다. 그리고 파일 끝에 배열 내용을 인쇄합니다.

답변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] } }

관련 정보