csv 파일이 있는데 12번째 문자가 아닌 경우 행을 삭제하고 싶습니다 ;
.
예를 들어 내 파일은 다음과 같습니다.
2266308;A;B;dfsgsfdg
2266309;A;BJHSADFK;gfsdg
2266310;A;B;dfg
그리고 나는 원한다:
2266308;A;B;dfsgsfdg
2266310;A;B;dfg
12번째 문자가 sed의 문자가 아닌 경우 이 줄을 어떻게 삭제합니까 ;
? =)
답변1
12번째 문자가 아닌 모든 줄을 삭제하려면 ;
다음을 수행하세요.
$ sed -E '/^.{11}[^;]/d' file
2266308;A;B;dfsgsfdg
2266310;A;B;dfg
또는 원본 파일을 편집합니다( sed
지원하는 경우 -i
).
$ sed -iE '/^.{11}[^;]/d' file
sed
지원하지 않는 경우 -E
:
sed -i '/^.\{11\}[^;]/d' file
하지만 csv 파일이므로 문자수 대신 필드를 사용하는 것이 훨씬 안전합니다. 예를 들어, awk
세 번째 필드가 한 문자 길이인 모든 줄을 인쇄하려면 다음을 사용하고 지시하십시오.
$ awk -F';' 'length($3)==1' file
2266308;A;B;dfsgsfdg
2266310;A;B;dfg
최신 GNU awk를 사용하면 파일을 제자리에서 편집할 수 있습니다.
awk -iinplace -F';' 'length($3)==1' file
이는 이전 필드의 길이 변화에 강인하다는 장점이 있습니다. 이 sed
방법과 달리 줄에 공백이 있거나 처음 두 필드 중 하나가 예상보다 길거나 짧은 경우에는 실패하지 않습니다. 일반적으로 데이터가 필드로 구분된 경우 문자 위치보다 필드를 사용하는 것이 좋습니다.