50000개 이상의 행이 포함된 csv 파일이 있습니다. 이는 단지 예일 뿐입니다.
Dcccrev,wefrwvfr,rfregt,wr4f,rfvrv,ecxwec,ecfrv,rfrf
Grge,gtgr,frfrv,gthtgv,gerg5tgvrt,rvrfvtg,tgt,frfrf,rfrf
Drfrfr,t,tgtg,rf,rgr,grtg,tgt,gtgtg,rg
.
.
.
내 작업은 다음과 같습니다. 각 줄의 구분 기호 "," 수가 7이 아닌 경우 줄 번호를 인쇄해야 합니다.
이 작업을 위해 awk 라인이나 perl 라인을 생성하는 것이 가능합니까?
echo나 cat을 사용하여 시간을 보낼 필요가 없습니다.
답변1
awk를 사용하면 매우 쉽습니다. 구분 기호를 설정한 다음 -F','
NF를 사용하여 열 수를 계산할 수 있습니다. 7개의 쉼표에는 8개의 필드가 필요하고 NR을 사용하여 현재 줄 번호를 인쇄합니다.
awk -F ',' 'NF != 8 {print NR}' test.txt
test.txt의 내용
Dcccrev,wefrwvfr,rfregt,wr4f,rfvrv,ecxwec,ecfrv,rfrf
Grge,gtgr,frfrv,gthtgv,gerg5tgvrt,rvrfvtg,tgt,frfrf,rfrf
Drfrfr,t,tgtg,rf,rgr,grtg,tgt,gtgtg,rg
산출
2
3
답변2
Perl의 s/// 연산자(tr///(y///라고도 함)를 사용할 수도 있음)는 수행된 대체 횟수를 반환하며, 이는 ","의 개수를 찾는 데 사용할 수 있습니다. 마찬가지로 m// 연산자는 일치 항목 수를 반환합니다.
perl -lne 's/,//g == 7 or print $.' yourfile
perl -lne 'print $. if 7 != (() = /,/g)' yourfile
sed -ne 's/[^,]//g; /^.\{7\}$/!=' yourfile