awk:无需编写代码即可绕过标头

awk:无需编写代码即可绕过标头

这是我经常输入的表达式,因为每个人都使用带头的 CSV 文件,并且我也必须出于我的目的传递标头:

cat foo.csv | awk -F',' 'BEGIN{start=0}{if(start==0){start = 1; print $0; next;} ...}'

必须有一些简单的设置来允许标头通过,并避免创建 BASH 脚本包装器(并在我的大脑中拖曳它)或一遍又一遍地编写它。

有这样的设定吗?

答案1

我假设您仍然想awk对此 CSV 文件执行文本处理操作。如果是这样,我建议在“行号”上添加一个条件,如下所示:

awk -F',' 'NR==1{print} NR>1{ your code here }' foo.csv

这里,NRawk“记录号”的内置变量,通常默认为行号(请注意,当处理多个文件时,这是“全局处理行数”,每个文件行数是FNR)。您还可以通过省略该部分来轻松省略打印标题NR==1{...}

如果最终您将print在操作中使用,您可以“打高尔夫球”以

awk -F',' 'NR>1{ your code here }1' foo.csv

代表1“打印结果行 ( $0)”。

还:

  • 您不需要将cat其通过管道传输到文件awk,只需将其作为命令行参数提供
  • 未初始化的变量默认为“0”,因此您实际上不需要在您的部分中使用该start=0语句BEGIN

相关内容