第1列中的交换值

时间:2014-01-07 21:28:19

标签: shell unix bioinformatics

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

CHROM POS ID REF ALT
22 345 567 A G
22 454 666 T G
23 454 555 C C
23 565 777 G G

我想将其更改为:

CHROM POS ID REF ALT
22 345 567 A G
22 454 666 T G
X 454 555 C C
X 565 777 G G

即。在第1列中,我想用X交换23.我该怎么做?

感谢。

2 个答案:

答案 0 :(得分:3)

在GNU sed中你可以这样做:

sed -e 's/^23\>/X/' file.txt

或使用perl

perl -pe 's/^23\b/X/' file.txt

或使用awk

awk '{ if ($1 == 23) sub("23", "X"); print }' file.txt

如果要在替换后更新文件,则可以使用以下任何命令:

sed -i -e 's/^23\>/X/' file.txt
perl -pi -e 's/^23\b/X/' file.txt

答案 1 :(得分:2)

您是否可以访问任何脚本语言?一个perl或python脚本替换一个行开头后跟23一行开头后跟X将非常简单。

请参阅此答案:Find and Replace Inside a Text File from a Bash Command

就像......

perl -pi -e 's/^23\s/X /g' /tmp/file.txt