BEGIN/END 문을 사용하여 발생 횟수 계산

BEGIN/END 문을 사용하여 발생 횟수 계산

숫자 목록이 있습니다.

2
1
3
2
2
2
1

먼저 파일 로그가 있습니다. 아이디를 모두 추출했습니다. 이제 각 숫자의 발생 횟수를 어떻게 계산하고 다음과 같이 표시할 수 있습니까? (첫 번째는 숫자, 두 번째는 해당 숫자가 나타나는 횟수입니다)

2,4
1,2
3,1

나는 아이디어가 있을 수 있습니다:

awk -F'|' 'BEGIN{print "count", "lineNum"}{print gsub(/t/,"") "\t" NR}' file

답변1

echo "$numbers" | sort | uniq -c | awk -v OFS=, '{print $2,$1}' | sort -t, -k2nr

작동 방식에 대해 의문이 있는 경우 이를 분해하는 가장 독학적인 방법은 분할하여 수행하는 것입니다.

echo "$numbers" | sort
echo "$numbers" | sort | uniq -c 
# and so on

물론, sort와 uniq에 대한 매뉴얼 페이지를 읽어보세요.


GNU awk를 사용하면 다음을 수행할 수 있습니다.

echo "$numbers" | gawk '
  {count[$1]++}
  END {
    PROCINFO["sorted_in"] = "@val_num_desc"
    OFS = ","
    for (thing in count) print thing, count[thing]
  }
'

관련 정보