AWK如何选取含空值的列?求正确实现方法
解决AWK提取制表符分隔文件第一列的问题
问题原因
AWK默认以任意连续空白字符(空格、制表符、换行等)作为字段分隔符,这会导致两个问题:
- 当行首是制表符时,AWK会跳过前面的空白,将后续非空字段错误识别为
$1(比如输入第三行的6、第五行的9都被当成了第一列) - 原命令
awk '$1!=""{print $1}'的判断逻辑不符合需求——你需要输出所有行的第一列(包括空值),而非仅非空的第一列
正确解决方案
指定字段分隔符为制表符,直接提取每一行的第一列:
awk -F'\t' '{print $1}' ./demo.txt
如果你的Shell不支持'\t'转义,可改用ANSI-C引号写法:
awk -F$'\t' '{print $1}' ./demo.txt
输出结果说明
执行上述命令后会输出5行(与输入行数一致):
- 第1行:
1(对应输入第一行的第一列) - 第2行:
4(对应输入第二行的第一列) - 第3行:空行(对应输入第三行的第一列空值)
- 第4行:
7(对应输入第四行的第一列) - 第5行:空行(对应输入第五行的第一列空值)
完全匹配你期望的包含空行的输出要求。
内容的提问来源于stack exchange,提问作者Shadiqur
相关产品推荐
相关产品推荐

