我有一些脚本使用awk
来解析CSV文件。我注意到,如果一个单元格为空,awk
只是移动到下一个单元格。这意味着,如果我要求它读取第4列,但该单元格为空,则会打印第5列中的数据,例如:
echo "1@2@3@@5" | awk -F "@*" '{print $4}'
我的预期结果是它什么都不打印,因为第4列是空的。
awk
会跳过第4列?awk
不要忽略空列?答案 0 :(得分:8)
问题不是你的想法。 awk并没有忽略空单元格;它将该行解析为4个字段而不是5个。
[me@home]$ echo "1@2@3@@5" | awk -F "@*" '{print NF}'
4
这是因为您使用@*
作为字段分隔符,允许一个或多个连续@
作为字段分隔符(@
,@@
,{{1} },...都是有效的字段分隔符)。
请尝试使用@@@
。
-F "@"