Bash 跳过标题时,使用awk将csv文件中的列归零

Bash 跳过标题时,使用awk将csv文件中的列归零,bash,csv,awk,Bash,Csv,Awk,我想将csv文件的一列归零。假设csv文件如下所示: col1|col2|col3 v | 54| t a | 25| f d | 53| f s | 04| t 以这种方式使用awk,几乎可以满足我的需求 命令: awk -F'|' -v OFS='|' '$2=0.0;7' input.csv > output.csv 结果 col1|0|col3 v |0| t a |0| f d |0| f s |0| t 但请注意,列标题也已归零,

我想将csv文件的一列归零。假设csv文件如下所示:

col1|col2|col3
v   |  54| t
a   |  25| f
d   |  53| f
s   |  04| t
以这种方式使用awk,几乎可以满足我的需求

命令:

awk -F'|' -v OFS='|'  '$2=0.0;7' input.csv > output.csv
结果

col1|0|col3
v   |0| t
a   |0| f
d   |0| f
s   |0| t
但请注意,列标题也已归零,这是我试图避免的。因此,我试图用awk命令跳过第一行,但得到的是一个空文件

awk -F'|' -v OFS='|'  'NR<1 {exit} {$5=0.0;7}' input.csv > output.csv

awk-F'|'-v OFS='|''NR将
exit
更改为
next
跳过第一行的其余操作。

exit
更改为
next
跳过第一行的其余操作。

只需将第二行的规则应用于
NR>1{/code>:

$ awk -F'|' -v OFS='|'  'NR>1{$2=0.0}7' file
col1|col2|col3
v   |0| t
a   |0| f
d   |0| f
s   |0| t

为什么你的方法不从第二行开始用
NR>1{}
应用规则

$ awk -F'|' -v OFS='|'  'NR>1{$2=0.0}7' file
col1|col2|col3
v   |0| t
a   |0| f
d   |0| f
s   |0| t

为什么你的方法不是awk-F'|'-v OFS='|''NRI这样做了,但是结果文件是空的我这样做了,但是结果文件是空的这是解决我问题的正确答案,谢谢。“我会在我能接受的时候接受它”。@MedAli你似乎也不太明白
7
在这种情况下做了什么。因为它不是零,所以它被视为awk。这同样适用于
$2=0.0
,但它被视为false。因此,从技术上讲,您的第一个命令(在问题中)被视为
'$2=0.0{print$0};7{print$0}'
'false{print$0};真的{print$0}
@User112638726,谢谢。现在我明白了7代表什么:)这是解决我问题的正确答案,谢谢。“我会在我能接受的时候接受它”。@MedAli你似乎也不太明白
7
在这种情况下做了什么。因为它不是零,所以它被视为awk。这同样适用于
$2=0.0
,但它被视为false。因此,从技术上讲,您的第一个命令(在问题中)被视为
'$2=0.0{print$0};7{print$0}'
'false{print$0};真的{print$0}
@User112638726,谢谢。现在我明白了7代表什么了:)为什么这里有一个7?似乎是一个打字错误…@Ismael检查一下用户112638726在接受的答案中的评论。你为什么有一个7?似乎是打字错误…@Ismael在接受的答案中检查user112638726的评论。