두 열의 문자열을 일치시킨 다음 AWK 개수를 인쇄합니다.

두 열의 문자열을 일치시킨 다음 AWK 개수를 인쇄합니다.

21개의 열이 있는 CSV 파일이 있습니다. 두 개의 열에서 문자열을 검색한 다음 총 발생 횟수를 계산하고 싶습니다.

내 데이터세트 샘플

columnA     columnB    columnC  columnD
abc          Apple      Apple     today
nbd          apple      NULL      tomorrow
ccc          apple      Apple     today

파일에서 문자열을 검색할 수 있습니다. 하지만 두 개의 열에서만 문자열을 검색하고 싶습니다. 내 검색은 대소문자를 구분합니다(정확히 일치).

awk -F',' '/Apple/ {++count} END{print count}' Dataset.csv

B열과 C열($2 && $3)에 검색을 적용하고 싶습니다. 출력은 3이어야 합니다.

어떤 팁이라도 도움이 될 것입니다. 감사해요

답변1

awk -F',' '$2 ~ /^Apple$/ {++count} $3 ~ /^Apple$/ {++count} END{print count}' Dataset.csv

또는 정확한 일치를 원하므로 ==다음을 수행합니다 ~.

awk -F',' '$2 == "Apple" {++count} $3 == "Apple" {++count} END{print count}' Dataset.csv

count에서 발견되면 추가됩니다.누구나 $2또는 $3.

count둘 다에서 발견된 경우 에만 증가시키려면 다음을 사용하십시오.

awk -F',' '$2 ~ /^Apple$/ && $3 ~ /^Apple$/ {++count} END{print count}' Dataset.csv

awk -F',' '$2 == "Apple" && $3 == "Apple" {++count} END{print count}' Dataset.csv

또는 (AND 문자열 x 2와 일치하도록 두 필드를 연결):

awk -F',' '$2$3 ~ /^AppleApple$/ {++count} END{print count}' Dataset.csv

awk -F',' '$2$3 == "AppleApple" {++count} END{print count}' Dataset.csv

답변2

awk를 사용하여 필드 구분 기호를 검색 모드로 설정합니다.

awk -F'Apple' '{count+=NF-1}END{print count}' file

count변수는 필드 수만큼 증가하고 파일 끝에 인쇄됩니다.


RS를 정규식으로 사용해야 하는 GNU awk를 사용하는 대안(단어 경계, @cas 감사):

 awk -v RS='\\<Apple\\>' 'END{print NR-1}' file

NR이는 파일에서 발견된 레코드 수를 확인하는 것뿐입니다.

관련 정보