파일의 모든 행을 가져와 개수를 나열하는 스크립트가 있지만, 내가 원하는 것은 열 3의 고유한 인스턴스만 가져오는 것입니다. 예를 들어 행은 아래 그림과 같은 것을 나타내며 현재 스크립트는 COMM_CONT의 모든 인스턴스를 계산하지만 실제로 원하는 것은 COMM_CONT가 있는 유일한 행(그림에서는 2)을 계산하는 것입니다.
따라서 아래 스크립트에서 네 가지 패턴이 발생하는 고유한 횟수를 계산하기를 원합니다. 나는 이것이 간단한 수정이어야 한다고 생각하지만 -u 및 -uniq를 시도했지만 그렇게 할 수 없는 것 같습니다.
#!/bin/bash
ORAL_MICRO=$(awk -F ',' '/ORAL_MICRO/{print $3;}' $1 | wc -l)
LAB_CONT=$(awk -F ',' '/LAB_CONT/{print $3;}' $1 | wc -l)
COMM_CONT=$(awk -F ',' '/COMM_CONT/{print $3;}' $1 | wc -l)
IMMUNE=$(awk -F ',' '/IMMUNE/{print $3;}' $1 | wc -l)
echo $1, $ORAL_MICRO, $LAB_CONT, $COMM_CONT, $IMMUNE >> $2
답변1
저는 두 가지 방법을 생각했습니다.
고유한 라인을 얻으 려면
sort
:COMM_CONT=$(awk -F ',' '/COMM_CONT/{print $3;}' $1 | sort -u | wc -l)
awk에서 작업 완료하기
COMM_CONT=$(awk -F, ' $3 ~ /COMM_CONT/ && !($3 in seen) {seen[$3]=1; count++} END {print count} ' $1)