다음 형식의 텍스트 파일이 있습니다.
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 [␉ ]+
대신 tab을 사용하세요 +
. 정확히 하나의 탭 문자 또는 일련의 공백을 허용하는 ␉
데 사용됩니다 .(␉| +)
답변2
정말로 원하는 것이 질문 제목에 있는 질문인 경우 이 awk
명령은 줄 번호와 각 줄의 필드 수를 인쇄합니다.
awk '{print NR,NF}'
답변3
awk '{if(NF != 3) print NR,NF}' file.txt
그러면 3개의 필드가 없는 파일의 줄 번호와 해당 필드의 개수가 인쇄됩니다.