У меня есть файл, который выглядит так:

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 я хочу поменять местами 23 на X. Как я могу это сделать?

Спасибо.

1
user3108631 8 Янв 2014 в 01:28

2 ответа

Лучший ответ

В 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
3
janos 7 Янв 2014 в 21:40

Есть ли у вас доступ к каким-либо языкам сценариев? сценарий perl или python для замены начала строки, за которым следует 23, на начало строки, за которым следует X, было бы довольно просто.

См. этот ответ: Найти и заменить внутри текста Файл из команды Bash

Так что-то вроде ...

perl -pi -e 's/^23\s/X /g' /tmp/file.txt
2
Community 23 Май 2017 в 12:11