쉘 스크립트를 사용하여 각 줄에 있는 고유 문자열 수를 계산합니다.

쉘 스크립트를 사용하여 각 줄에 있는 고유 문자열 수를 계산합니다.

저는 Unix 쉘 스크립트를 사용하고 있으며 다음 데이터가 포함된 입력 파일이 있습니다.

3:abc
1:xyz
1:abc
2:def
10:xyz

내 예상 결과는 다음과 같습니다

4:abc
11:xyz
2:def

즉, 구분 기호 뒤의 각 줄에서 고유한 문자열을 찾아 그 앞에 숫자를 추가합니다. 어떻게 해야 하나요?

답변1

여기에 사용된 솔루션이 있습니다 awk. 값을 배열에 누적합니다.

awk -F ":" '{count[$2]+=$1} END {for (key in count) print key, count[key]}' awk_data.txt

다음은 bash스크립트를 사용하는 버전입니다.

#!/usr/bin/env bash
declare -A count
while read line; do
    key=${line##*:}
    cnt=${line%%:*}
    count[$key]=$(($cnt + ${count[$key]=0}))
done < "$1"
for K in "${!count[@]}"; do echo $K ${count[$K]}; done

bash댓글의 다른 버전은 다음을 사용합니다.IFS=:

#!/usr/bin/env bash
declare -A count
while IFS=: read -r cnt key; do
    count[$key]=$(($cnt + ${count[$key]=0}))
done < "$1"
for K in "${!count[@]}"; do echo $K ${count[$K]}; done

답변2

GNU에서 전리품을 얻고 싶을 수도 있습니다.데이터 혼합유용. 예(PO의 table.txt):

$ sort -t: -k 2 table.txt | datamash -t: -g 2 sum 1 collapse 1
abc:4:1,3
def:2:2
xyz:11:10,1
  • -t:필드 구분 기호는 다음과 같습니다.
  • -g 2두 번째(이전에 정렬된) 열을 기준으로 그룹화
  • sum 11열의 해당 값을 합산합니다.
  • collapse 1","를 사용하여 별도의 목록으로 축소합니다.

관련 정보