한 열의 고유한 값을 모두 찾으려고 합니다. 그러나 이 명령을 사용하면 헤더 행도 얻을 수 있습니다. 건너뛰려면 어떻게 해야 하나요?
awk -vFPAT='([^,]*)|("[^"]+")|","' '{if ($2!~/NULL/) {print $2}}' Files/* | sort | uniq -c | sort -n | wc -l
샘플 데이터는 다음과 같습니다.
"link","shared_story","101","52
"link","published_story","118","100
"link","published_story","134","51
"link",NULL,"152","398
"link","shared_story","398","110
답변1
awk에 있는 현재 파일의 줄 번호는 특수 FNR
변수( NR
각 파일의 줄 번호가 아닌 전체 줄 번호를 보유함)에 저장됩니다. 따라서 제목이 첫 번째 줄에 있는 경우 해당 줄을 건너뛰도록 명령을 수정하면 됩니다.
awk -vFPAT='([^,]*)|("[^"]+")|","' '{if ($2!~/NULL/ && FNR>1) {print $2}}' Files/*
또는 특정 문자열과 일치하는 헤더의 줄을 건너뛸 수 있습니다.
awk -vFPAT='([^,]*)|("[^"]+")|","' '{if ($2!~/NULL/ && !/headerString/) {print $2}}' Files/*
답변2
다음과 같이 하나의 awk 명령을 사용하여 전체 작업을 수행할 수 있습니다.
awk -vFPAT='([^,]*)|("[^"]+")|","' 'FNR > 1 && $2 !~ /NULL/ && !seen[$2]++ {cnt++}
END {print cnt}' *.csv
바라보다여기이 관용구의 예는 awk
해시를 처음 볼 때만 해시의 값을 고려하는 데 사용됩니다. 따라서 중복 제외, 고유 제외, N 발생만 허용 등과 같은 다양한 작업에 유용합니다.
표준 예시도 참조하세요awk 내장 변수, FNR은 파일당 레코드 수입니다(입력 파일의 경우 FNR==NR
라인당).
또한 일반적으로 첫 번째 줄을 제외한 모든 파일을 구문 분석하기 위해 명령을 사용하려는 경우 를 사용할 수 있습니다 tail
. 그러면 각 파일의 첫 번째 줄이 제외되고 나머지가 인쇄됩니다.
tail -n +2 *.csv | command