我有一个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:^意外的换行符或字符串结尾
有关正确方法的任何建议吗?
答案 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