![awk는 문자열과 일치하고 열 값을 합산합니다.](https://linux55.com/image/181658/awk%EB%8A%94%20%EB%AC%B8%EC%9E%90%EC%97%B4%EA%B3%BC%20%EC%9D%BC%EC%B9%98%ED%95%98%EA%B3%A0%20%EC%97%B4%20%EA%B0%92%EC%9D%84%20%ED%95%A9%EC%82%B0%ED%95%A9%EB%8B%88%EB%8B%A4..png)
5개의 csv 파일이 포함된 폴더에서 단어를 일치시키려고 하는데 United States
사용하는 명령은 행에서 단일 항목이 있는지 확인합니다. 또한 일치하는 문자열을 기반으로 다른 두 열을 합산하고 싶습니다.
awk -F "," '{if (/United States/) sum_1 += $2;sum_2 += $3} END {print sum_1, sum_2}' Files/*.csv
예, 연속으로 두 번 이상 발생하는지 확인하려고 합니다 awk
.
따라서 미국과 관련된 줄이 두 번 나타나면 다음과 같이 표시되어야 합니다.
2
awk '/United States/{x++;}END{print x}' Files/*csv
샘플 파일
United States,1,2,3
Donald TRump,1,2,3
United States,1,2,3,United States
답변1
awk '/United States/ {i++} END {print i}' RS=",|\n" Files/*.csv
RS
- 기본적으로 개행으로 설정되는 레코드 구분 기호를 입력합니다.
답변2
앗
문자열 함수를 사용할 수 있습니다격자, 행당 대체 횟수를 반환합니다. 이는 각 행의 발생 횟수를 계산하는 편리한 방법이며 모든 행에 대해 이 작업을 수행할 수 있으므로 모든 행의 수를 계산할 수 있습니다.
awk '{cnt += gsub(/United States/,"&")} END {print cnt}' *.csv
awk 스크립트에서 이 검사를 사용하려면(귀하의 예에서와 같이) 다음과 같은 구문을 사용할 수 있습니다.
awk '{ if (gsub(/pattern/"&")) {"do stuff here"} }' file
또는
awk '{x = gsub(/pattern/"&"); "do stuff with x here"; }' file
grep
또한 를 사용하면 grep
출력 -o
에서 일치하는 항목당 하나의 행을 얻고 출력 행 수가 결과입니다.
grep -o "United States" *.csv | wc -l
답변3
귀하가 제공한 예제 입력 파일을 고려하면 @nezabudka의 답변은 다음과 같습니다.
awk 'BEGIN {RS=",|\n"} /United States/ {i++} END {print i}' inputFile
맞는 것 같습니다. 그러면 다음과 같은 질문이 표시됩니다. 예제 입력 파일이 모든 필드 구분 기호를 나타내는 것이 확실합니까? 그렇지 않은 경우 다음과 같은 입력 파일 상황을 허용하는 대체 솔루션이 있습니다.
> cat inputFile
United States,1,2,3
Donald TRump,1,2,3 United States blih blah \!?# bluh United States
United States,1,2,3,United States
> awk 'BEGIN {RS=",|\n| "}
/United/ {rec=NR; next}
/States/ && NR==rec+1 {i++}
END {print i}' inputFile
5
답변4
주문하다
#/bin/bash
awk '{print gsub("United States",$0)}' filename| awk 'BEGIN{sum=0}{sum=sum+$1}END{print sum}'