我有一个看起来像的文件:
'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
或者:
$ awk -v replace="'" '{gsub(replace,"",$2)}1' file
'abc', 123
'abc', 123
'abc', 123
'abc', 123
'abc', 123
'abc', 123
您可以提供要对其应用 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 到,
gsub()
替换后不会返回字符串'
。它将返回替换的数量。结果本身将在$2
操作后存储。像这样:
awk '{gsub("\047","",$2);print}' test.file
输出:
'abc', 123
'abc', 123
'abc', 123
'abc', 123
'abc', 123
'abc', 123