如何用文件的一列中的一列替换复杂的字符串?

如何用文件的一列中的一列替换复杂的字符串?

我有一个像这样的文件(1kG_MDS5.bim):

1   rs58108140  0   10583   A   G
1   1:11508[b37]A,G 0   11508   A   G
1   1:15820[b37]G,T 0   15820   T   G
1   1:16257[b37]C,G 0   16257   C   G
1   1:16378[b37]C,T 0   16378   T   C

我想删除第二列中所有出现的 [b37] 并将逗号替换为列,以便最终结果如下所示:

1   rs58108140  0   10583   A   G
1   1:11508:A:G 0   11508   A   G
1   1:15820:G:T 0   15820   T   G
1   1:16257:C:G 0   16257   C   G
1   1:16378:C:T 0   16378   T   C

我尝试通过运行以下命令来部分解决这个问题(只需删除 [b37]):

sed -i -E 's/([b37])/:/g' 1kG_MDS5.bim

但我得到了这个:

1   rs58108140  0   1058:   A   G
1   1:11508[:::]A,G 0   11508   A   G
1   1:15820[:::]G,T 0   15820   T   G
1   1:1625:[:::]C,G 0   1625:   C   G

您能否告诉我如何获得最终结果,其中线条如上所示。它不需要是 sed 解决方案(awk 会很棒)而且这个文件包含大约 600 万行。

答案1

你可以试试这个:

sed 's/\[b37\]\(.\),/:\1:/' 1kG_MDS5.bim

输出:

1   rs58108140  0   10583   A   G
1   1:11508:A:G 0   11508   A   G
1   1:15820:G:T 0   15820   T   G
1   1:16257:C:G 0   16257   C   G
1   1:16378:C:T 0   16378   T   C

您的模式中的问题是括号没有转义,因此sed尝试替换出现的 b、3 和 7,而不是字符串“[b37]”。

相关内容