使用awk

时间:2016-06-27 13:56:54

标签: bash csv awk

我有一个csv文件,如下例所示:

fieldname1: "This is field1", "id":55, fieldname2: "This is field2", "id":66

我想使用awk命令将第四个字段从“”id“:66”替换为“”id“:72”。我已经尝试了以下方法但是出现语法错误:

awk -F, '{${4}="\"id\":999";}1' OFS=, rule.txt

错误是:

  

awk:{$ {4} =“\”id \“:999”;} 1

     

awk:^语法错误

     

awk:{$ {4} =“\”id \“:999”;} 1

     

awk:^语法错误

     

awk:cmd。 line:1:{$ {4} =“\”id \“:999”;} 1   awk:cmd。 line:1:^意外的换行符或字符串结尾

有关正确方法的任何建议吗?

1 个答案:

答案 0 :(得分:2)

您只需要说$4而不是${4}

$ awk -F, '{$4="\"id\":999";}1' OFS=, file
#           ^^
fieldname1: "This is field1", "id":55, fieldname2: "This is field2","id":999

如果您想通过变量提供值,请照常使用-v value="$bash_var"

$ awk -F, -v val=999 '{$4="\"id\":" val;}1' OFS=, file
#         ^^^^^^^^^^              ^^^^^
fieldname1: "This is field1", "id":55, fieldname2: "This is field2","id":999

请注意,在使用变量${ }$hello混淆时,例如$hello_you - >时,Bash中会使用echo "$hello_you"来避免混淆。在这种情况下,您可以说echo "${hello}_you"来定义变量名称的范围。

但在awk中,这样的事情不应该是必要的,因为你将字符串部分用双引号括起来:

$ awk 'BEGIN {a=23; print a"_b"}'
23_b