计算文本文件每列的行数

计算文本文件每列的行数

我有一个具有以下格式的文本文件:

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 个字段的行号以及它们具有的字段数。

相关内容