use*_*122 6 sed awk text-processing
我有一个具有以下格式的文本文件:
5 3 1
2 3 4
.....
.....
即空格分隔 3 列数字/ 但是,某些行可能是这样的:
2
3 1
所以,我想检测文本文件是否有这样的不一致并打印出来。我该怎么做呢?
awk 'NF != 3'
Run Code Online (Sandbox Code Playgroud)
这是打印所有不完全包含三列的行的简单方法。如果您还希望命令在找到任何此类行时返回失败状态:
awk 'NF != 3 {print; ++bad} END {exit(!!bad)}'
Run Code Online (Sandbox Code Playgroud)
删除print;
以不打印任何内容,仅通过退出状态报告此类行的存在。
您也可以使用 grep 执行此操作:
grep -Ev '^[^ ]+ +[^ ]+ +[^ ]+$'
Run Code Online (Sandbox Code Playgroud)
如果您想更严格并打印所有不包含正好包含一个整数的三列的行:
grep -Ev '^([0-9]+) +([0-9]+) +([0-9]+)$'
Run Code Online (Sandbox Code Playgroud)
如果您希望允许一个或多个制表符作为列分隔符,请使用[? ]+
而不是 +
where?
是制表符。用于(?| +)
只允许一个制表符或一系列空格。