다음을 포함하는 탭으로 구분된 필드가 있는 텍스트 파일이 있습니다.
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
각 행과 반복 횟수를 인쇄합니다. - 마지막으로
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] } }