如何使用awk统计文件第一列的非空记录总数?
awk实现文件第一列非空记录数统计
完全可以使用awk完成该统计需求,对应你的测试场景,预期统计第一列非空的行总数为4。
原命令错误原因
你之前使用的命令核心判断逻辑有误:NF==$1是拿「当前行按分隔符拆分后的字段总个数」和「第一列的文本内容」做相等判断,NF是数值,$1是字符串,二者不存在符合你需求的匹配关系,自然无法得到正确结果。
正确实现命令
awk -F'|' '$1 != "" {c++} END{print c}' file
逻辑说明
-F'|':指定字段分隔符为竖线|- 逐行处理时,只要第一列
$1不是空字符串,就给计数器c加1 - 所有行遍历完成后,在END块输出计数器
c的最终值
等价写法
也可以通过判断第一列长度实现相同效果,awk中长度大于0的判断条件会自动被识别为真:
awk -F'|' 'length($1) {c++} END{print c}' file
结果验证
对应你提供的测试文件,逐行判断计数过程如下:
abc|87123:第一列为abc非空,计数+1cdb|:第一列为cdb非空,计数+1fgytw|23321:第一列为fgytw非空,计数+1ghft|:第一列为ghft非空,计数+1|87635:第一列为空,不计数
最终输出结果为4,完全符合预期。
内容的提问来源于stack exchange,提问作者Nadia Alice
相关产品推荐
相关产品推荐

