Shell 如何删除文本中仅包含单个列的行?
Shell 实现删除仅含单个列的行的方法
核心方案(awk实现,最严谨通用)
直接使用如下命令处理目标文本文件即可:
awk 'NF>1' 你的输入文件名
原理解释:
- awk默认以任意空白字符(空格、制表符等)作为列分隔符拆分每行内容
- 内置变量
NF表示当前行的字段(列)总数 - 条件
NF>1表示仅保留列数大于1的行,awk匹配条件后默认动作是打印该行,因此无需额外写打印逻辑
针对你的示例输入运行该命令,会直接过滤掉仅含1列的ijk、mno行,输出你预期的结果。
特殊场景适配
如果你的列分隔符不是默认空白,比如是逗号分隔的CSV文件,可以通过-F参数指定分隔符:
# 处理CSV文件,删除仅含单列的行 awk -F',' 'NF>1' input.csv
其他可选方案(grep实现,仅适用于无行首行尾空白的场景)
如果确认所有行的首尾都没有多余空白,也可以用grep匹配包含空白字符的行:
grep '[[:blank:]]' 你的输入文件名
注意该方案不严谨:如果某行只有1个单词但首尾存在空白字符,会被误判为多列,因此优先推荐使用awk方案。
内容的提问来源于stack exchange,提问作者janasu
相关产品推荐
相关产品推荐

