用awk替换某列中的字符串

时间:2013-09-26 05:11:28

标签: awk gsub backreference

我正在尝试使用awk,gsub和backreference替换第一列中的一串数字。

例如,我的输入文件是

1-00001 1 1-00001
1-00001-01 1 1-00001
1-00001-02 1 1-00001

我想要的输出是

1-00001-00 1 1-00001
1-00001-01 1 1-00001
1-00001-02 1 1-00001

我尝试了以下unix命令

 awk '{gsub("^1-\([0-9]\)\([0-9]\)\([0-9]\)\([0-9]\)\([0-9]\)$","^1-\1\2\3\4\5-00$",$1); print}' input

,输出

^1-^A^B^C^D^E-00$ 1 1-00001
1-00001-01 1 1-00001
1-00001-02 1 1-00001

有人可以告诉我我的命令有什么问题吗? 提前谢谢!

1 个答案:

答案 0 :(得分:2)

我认为您需要使用gensub中的gnu awk来获取反向引用。 但是如果你告诉我们你想要什么,输入和输出,它可以以不同的方式完成。像这样:

awk 'split($1,a,"-")!=3 {$1=$1 "-00"}1' file
1-00001-00 1 1-00001
1-00001-01 1 1-00001
1-00001-02 1 1-00001