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
이는 파일에서 발견된 레코드 수를 확인하는 것뿐입니다.