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

Chr*_*ris 0 shell bash awk csv

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

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

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

有这样的设定吗?

Adm*_*Bee 5

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

awk -F',' 'NR==1{print} NR>1{ your code here }' foo.csv
Run Code Online (Sandbox Code Playgroud)

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

如果最终你print无论如何都会在你的操作中使用,你可以“打高尔夫球”这个

awk -F',' 'NR>1{ your code here }1' foo.csv
Run Code Online (Sandbox Code Playgroud)

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

还:

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