Bash 跳过标题时,使用awk将csv文件中的列归零
我想将csv文件的一列归零。假设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 但请注意,列标题也已归零,
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的评论。