在列/字段中替换AWK中的单引号

时间:2013-05-07 05:50:04

标签: unix awk

我有一个看起来像的文件:

'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

3 个答案:

答案 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到,