我的输入数据文件 abc.txt 有这个
"20131008","0004","0568","98"
我运行这个命令来替换文本
nawk -F, -vOFS=',' '{gsub("0568","0808",$3); print }' abc.txt
在输出中,分隔符“,”被替换为空格。输出看起来像这样。
"20131008" "0004" "0568" "98".
有人可以帮忙解决这个问题吗?我尝试更换-vOFS
但不起作用。
答案1
这个答案在命令行输出和文件更改中进行了演示awk
和示例。sed
对于awk
,我们将$ awk -F"," '{gsub("0568", "0808", $3)}1' input.txt
在命令行输出(或变量)中使用并接收更改后的字符串,但原始文件不会更改。
$ cat input.txt
"20131008","0004","0568","98"
$ awk -F"," '{gsub("0568", "0808", $3)}1' input.txt
"20131008" "0004" "0808" "98"
对于sed
,我们将使用简单的形式sed -i 's/string to replace/new string/g' input.txt
,其中-i
标志表示就地更改(即修改原始文件)。
$ cat input.txt
"20131008","0004","0568","98"
$ sed -i 's/0568/0808/g' input.txt
$ cat input.txt
"20131008","0004","0808","98"
虽然这不是您所要求的nawk
(我没有安装),但我希望您会发现它有帮助。
答案2
我没有,nawk
但这对我有用(gawk
使用--posix
开关):
awk 'BEGIN{FS=OFS=","}{sub(/0568/,"0808",$3)}1' file
费多基的评论建议您可能需要使用-v OFS=','
而不是,-vOFS=','
但如果输入和输出分隔符相同,则块中的赋值BEGIN
不会太长。我也将您更改gsub
为,sub
因为看起来您只想进行一项替换。这两个函数的第一个参数都是正则表达式,因此您不应向其传递字符串。
输出:
"20131008","0004","0808","98"
答案3
我试过这个:
nawk 'BEGIN { FS=OFS="," } { sub("0568","0808",$3) }1' abc.txt
效果很好。