2

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

'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
4

3 回答 3

5

或者:

$ awk -v replace="'" '{gsub(replace,"",$2)}1' file
'abc', 123
'abc', 123
'abc', 123
'abc', 123
'abc', 123
'abc', 123
于 2013-05-07T07:30:00.540 回答
3

您可以提供要对其应用 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 到,

于 2013-05-07T05:59:24.773 回答
2

gsub()替换后不会返回字符串'。它将返回替换的数量。结果本身将在$2操作后存储。像这样:

awk '{gsub("\047","",$2);print}' test.file

输出:

'abc', 123
'abc', 123
'abc', 123
'abc', 123
'abc', 123
'abc', 123
于 2013-05-07T05:58:06.190 回答