Chris Asked: 2020-02-11 07:38:35 +0800 CST2020-02-11 07:38:35 +0800 CST 2020-02-11 07:38:35 +0800 CST awk:绕过标头而不编写代码 772 这是我在常规基础上输入的一个表达式,因为每个人都使用带头的 CSV 文件,而且我也必须传递标题以达到我的目的: cat foo.csv | awk -F',' 'BEGIN{start=0}{if(start==0){start = 1; print $0; next;} ...}' 必须有一些简单的设置来允许标头通过,并避免创建 BASH 脚本包装器(并在我的大脑中拖曳它)或一遍又一遍地编写它。 有这样的设置吗? bash shell 1 个回答 Voted Best Answer AdminBee 2020-02-11T07:42:08+08:002020-02-11T07:42:08+08:00 我假设您仍然希望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
我假设您仍然希望
awk
对此 CSV 文件执行文本处理操作。如果是这样,我建议在“行号”上添加一个条件,如下所示:这里,
NR
是awk
“记录号”的内置变量,通常默认为行号(注意,在处理多个文件时,这是“全局处理的行数”,每个文件的行号为FNR
)。您还可以通过省略NR==1{...}
部分轻松省略打印标题。如果最终你将
print
在你的操作中使用,你可以“打高尔夫球”这个代表
1
“打印结果行($0
)”。还:
cat
文件通过管道传输到awk
,只需将其作为命令行参数提供start=0
中的语句BEGIN