如果等于特定值,则替换列

clo*_*d36 6 unix linux awk sed

如果它等于,我正在寻找替换CSV中的第四列N/A.我正试图改变它-1.
我似乎无法让这个工作.

awk -F , '{ if($4 == "N/A") {$4 = -1} }' test.csv
Run Code Online (Sandbox Code Playgroud)

jay*_*ngh 13

您可以使用以下内容awk:

awk -F, '{ $4 = ($4 == "N/A" ? -1 : $4) } 1' OFS=, test.csv
Run Code Online (Sandbox Code Playgroud)
  • 我们将输入和输出字段分隔符设置,为保留csv文件中的分隔符
  • 我们检查第四个字段是否等于"N/A"然后我们为它分配值,-1如果不是我们保持该值的原样.
  • 1 根据我们的测试是否成功,最后打印您的生产线是否有修改的第4列.
  • ($4=="N/A"?-1:$4)是一个三元运算符,检查条件$4=="N/A"是否为真.如果为true,?那么我们分配-1,如果为false,:我们保持字段不变.

在示例文件上运行测试:

$ cat file
a,b,c,d,e,f
1,2,3,4,5,6
44,2,1,N/A,4,5
24,sdf,sdf,4,2,254,5
a,f,f,N/A,f,4
Run Code Online (Sandbox Code Playgroud)

$ awk -F, '{ $4 = ($4 == "N/A" ? -1 : $4) } 1' OFS=, file
a,b,c,d,e,f
1,2,3,4,5,6
44,2,1,-1,4,5
24,sdf,sdf,4,2,254,5
a,f,f,-1,f,4
Run Code Online (Sandbox Code Playgroud)

  • +1是一个很好的解释(尽管通过总是分配给'$ 4`来重建_every_输入行可能有点过头了).我可以建议在最后的"1"之前放置一个空格,以便更好地表明它是一个_separate_命令(具有隐含动作的模式)吗? (2认同)