这是我经常输入的表达式,因为每个人都使用带头的 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
这里,NR
是awk
“记录号”的内置变量,通常默认为行号(请注意,当处理多个文件时,这是“全局处理行数”,每个文件行数是FNR
)。您还可以通过省略该部分来轻松省略打印标题NR==1{...}
。
如果最终您将print
在操作中使用,您可以“打高尔夫球”以
awk -F',' 'NR>1{ your code here }1' foo.csv
代表1
“打印结果行 ( $0
)”。
还:
- 您不需要将
cat
其通过管道传输到文件awk
,只需将其作为命令行参数提供 - 未初始化的变量默认为“0”,因此您实际上不需要在您的部分中使用该
start=0
语句BEGIN