使用awk解析CSV文件时,为什么忽略空单元格?

时间:2012-04-19 14:54:17

标签: bash csv awk

我有一些脚本使用awk来解析CSV文件。我注意到,如果一个单元格为空,awk只是移动到下一个单元格。这意味着,如果我要求它读取第4列,但该单元格为空,则会打印第5列中的数据,例如:

echo "1@2@3@@5" | awk -F "@*" '{print $4}'

我的预期结果是它什么都不打印,因为第4列是空的。

  • 为什么awk会跳过第4列?
  • 如何让awk不要忽略空列?

1 个答案:

答案 0 :(得分:8)

问题不是你的想法。 awk并没有忽略空单元格;它将该行解析为4个字段而不是5个。

[me@home]$ echo "1@2@3@@5" | awk -F "@*" '{print NF}'
4

这是因为您使用@*作为字段分隔符,允许一个或多个连续@作为字段分隔符(@@@,{{1} },...都是有效的字段分隔符)。

请尝试使用@@@

-F "@"