다음 형식의 텍스트 파일이 있습니다.
5 3 1
2 3 4
.....
.....
즉 공백으로 구분된 3개의 숫자 열/ 그러나 일부 행은 다음과 같을 수 있습니다.
2
3 1
따라서 텍스트 파일에 그러한 항목이 있는지 감지하고 싶습니다 . 불일치를 찾아서 인쇄합니다. 어떻게 해야 하나요?
답변1
awk 'NF != 3'
이는 정확히 세 개의 열이 없는 모든 줄을 인쇄하는 간단한 방법입니다. 해당 줄이 발견되면 명령이 실패 상태를 반환하도록 하려면 다음을 수행하십시오.
awk 'NF != 3 {print; ++bad} END {exit(!!bad)}'
print;
아무 것도 인쇄하지 않고 종료 상태를 통해 해당 줄의 존재만 보고하려면 제거하세요 .
grep을 사용하여 이 작업을 수행할 수도 있습니다.
grep -Ev '^[^ ]+ +[^ ]+ +[^ ]+$'
좀 더 엄격하게 정수를 포함하는 정확히 세 개의 열로 구성되지 않은 모든 줄을 인쇄하려면 다음을 수행하세요.
grep -Ev '^([0-9]+) +([0-9]+) +([0-9]+)$'
하나 이상의 탭을 열 구분 기호로 허용하려면 where is a tab 문자 [␉ ]+
대신 사용하십시오 . 정확히 하나의 탭 또는 일련의 공백을 허용하는 데 사용됩니다 . +
␉
(␉| +)
답변2
실제로 원하는 것이 질문 제목의 내용인 경우 이 awk
명령은 줄 번호와 각 줄의 필드 수를 인쇄합니다.
awk '{print NR,NF}'
답변3
awk '{if(NF != 3) print NR,NF}' file.txt
그러면 3개의 필드가 없는 파일의 행 번호와 해당 필드의 수가 인쇄됩니다.