我有一个看起来像的文件:
'abc', '123'
'abc', '123'
'abc', '123'
'abc', '123'
'abc', '123'
'abc', '123'
我想仅在第2列中替换单引号。我正在尝试以下AWK命令,但它无效。
awk 'BEGIN {FS=","} { if(NF==2){gsub("\047", "")}; print $0}' file.txt
答案 0 :(得分:5)
可替换地:
$ awk -v replace="'" '{gsub(replace,"",$2)}1' file
'abc', 123
'abc', 123
'abc', 123
'abc', 123
'abc', 123
'abc', 123
答案 1 :(得分:2)
gsub()
后, '
将不会返回字符串。它将返回替换的数量。结果本身将在操作后存储在$2
中。像这样:
awk '{gsub("\047","",$2);print}' test.file
输出:
'abc', 123
'abc', 123
'abc', 123
'abc', 123
'abc', 123
'abc', 123
答案 2 :(得分:2)
您可以将要应用gsub功能的目标提供给。
只需将您的代码更改为:
awk -F, 'BEGIN{OFS=","}{{gsub("\047","",$2)}; print}' file.txt > output.txt
此处gsub("\047", "",$2)
仅在$ 2,第二列上运行。
另一件事,你的条件if(NF==2)
不会工作,因为NF是整个记录中的字段数,在这种情况下是常数,即2。
输入:
$ cat file.txt
'abc', '123'
'abc', '123'
'abc', '123'
'abc', '123'
'abc', '123'
'abc', '123'
输出:
$ cat file.txt | awk -F, 'BEGIN{OFS=","}{{gsub("\047","",$2)}; print}'
'abc',123
'abc',123
'abc',123
'abc',123
'abc',123
'abc',123
编辑:OFS到,