我有一個具有以下格式的文字檔案:
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 。␉
用於(␉| +)
允許恰好一個製表符或一系列空格。
答案2
如果您真正想要的是問題標題中詢問的內容,此awk
命令將列印行號和每行中的欄位數:
awk '{print NR,NF}'
答案3
awk '{if(NF != 3) print NR,NF}' file.txt
這將列印文件中沒有 3 個欄位的行號以及它們具有的欄位數。