
누구든지 구분 기호(쉼표)를 기반으로 파일의 행을 삭제하는 데 도움을 줄 수 있습니까? 행에 열 수가 적거나 잘못된 레코드가 포함되어 있으면 삭제해야 합니다.
Input File:
a,b,c,d
a,b,d,f
c,d
a,v,b,h
d,e,v,n
위 파일에서 구분 기호가 4보다 작으면 해당 줄을 파일에서 제거해야 합니다.
Output File :
a,b,c,d
a,b,d,f
a,v,b,h
d,e,v,n
아래 명령은 한 줄의 구분 기호 수를 제공합니다. 4와 같지 않은 경우 어떻게 제거할 수 있습니까?
egrep -iv '"' file.csv | awk -F',' '{print NF}'
감사해요.
답변1
또 다른 Perl: 쉼표가 3개 있으면 한 줄을 인쇄합니다.
perl -i.bak -ne 'print if tr/,/,/==3' file
이 tr
연산자는 음역된 문자 수를 반환합니다.
답변2
그리고 perl
:
$ perl -F, -i.bak -ane 'print if @F > 3' file
perl
>5.20 의 경우 및 ( 묵시적 및 묵시적 ) -F
없이 수행 할 수 있습니다 .-a
-n
-F
-a
-a
-n
또는 다음을 사용할 수 있습니다 sed
.
$ sed -i.bak -e '/\([^,]*,\)\{3,\}/!d' file
답변3
awk를 사용할 수 있습니다.
awk -F',' 'NF==4' file
버전 >= 4.1.0을 사용할 수 있으면 다음을 gawk
사용할 수 있습니다 .inplace
정보. 따라서 다음과 같을 수 있습니다.
gawk -i inplace -v INPLACE_SUFFIX=.bak -F',' 'NF==4' file
답변4
GNU sed 사용:
sed -nE '/^.+,.+,.+,.+$/p' file > output_file