300만 줄이 넘는 텍스트 파일이 있는데 어딘가에 불균형 참조가 있습니다. 불균형한 견적을 어떻게 찾을 수 있나요 " "
?
답변1
awk -F\" 'NF%2==0 { print NR;; }' inputfile
홀수를 가진 모든 행을 제공합니다 "
.
답변2
참고로, 따옴표를 이스케이프할 수 있는 경우 균형 있는 따옴표 문자열 찾기\"
상당히 복잡해질 수 있다정확하게 올바른 결과를 얻으므로 속도가 느려집니다.
(?<=^|[^\\])(?:\\\\)*("((?:[^\n\\"]|\\.)*+)"|'((?:[^\n'])*+)')
그러나 한 가지 유형의 따옴표( )에만 관심이 있고 "
작은 따옴표 안에 큰 따옴표가 없으며 큰 따옴표( )가 이스케이프되지 않으면 문제가 매우 간단해지고 속도를 위해 간단한 방법과 Quick and 짝수가 아닌(홀수) 큰따옴표로 줄 번호를 가져오는 파이프:"
'"'
\"
tr
grep
➤ tr -cd '"\n' <file | grep -nxE '("")+"'
15:"""
16:"""
답변3
이 awk는 홀수 개의 따옴표가 있는 줄을 찾아 파일 이름, 줄 번호 및 처음 80자를 인쇄합니다.
awk '
BEGIN { DQ = "\042"; fmt = "%s:%d:%.80s\n"; }
gsub (DQ, DQ) % 2 { printf (fmt, FILENAME, FNR, $0); }
' file1 file2 ...
콘텐츠의 구문에 따라 일부 오탐지가 발생할 수 있으므로 줄 번호를 사용하여 편집기에 확인하여 특정 레코드를 찾으세요.
둘 이상이 밀접하게 연결된 경우 데이터에 줄 바꿈이 포함된 CSV 필드와 같이 여러 행이 데이터를 참조할 수 있는 구문을 나타낼 수 있습니다.
일치하지 않는 작은따옴표 및 큰따옴표를 보고하도록 확장됩니다.
awk '
BEGIN { DQ = "\042"; SQ = "\047"; fmt = "%s:%d:%.80s\n"; }
gsub (DQ, DQ) % 2 || gsub (SQ, SQ) % 2 { printf (fmt, FILENAME, FNR, $0); }
' file1 file2 ...