Как объединить, объединить, объединить первые два столбца в текстовом файле, разделенном подчеркиванием? - PullRequest
0 голосов
/ 21 января 2019

У меня есть текст: файл SG_gen.txt с несколькими столбцами, который выглядит примерно так:

  snp_CHR      POS HG00096 HG00097 HG00099 HG00100 HG00101 HG00102 HG00103
   snp_3 47609552       0       1       1       1       1       0       1
   snp_3 47614413       0       1       1       1       1       0       1
   snp_3 47616151       0       1       1       1       1       0       1
   snp_3 47616155       0       1       1       1       1       0       1
   snp_3 47617504       0       1       1       1       1       0       1
   snp_3 47617679       0       1       1       1       1       0       1
...

Я хотел бы соединить первые два столбца: snp_CHR и POS с помощью "_" и переименовать его в ID, чтобы столбец выглядел так:

ID
snp_3_47609552
snp_3_47614413
snp_3_47616151
...

Этот новый столбец идентификаторов будет первым, и я оставлю все остальные столбцы HG00096, HG00097 ... Я не сохраню исходные snp_CHR и POS. Как бы я это сделал?

Я пытался использовать:

awk '{print $0, $1 "_" $NF}' SG_gen.txt > SG_gen1.txt 

но это не дало мне желаемого результата.

Ответы [ 3 ]

0 голосов
/ 22 января 2019

Учитывая, что ваш Input_file такой же, как показано на примерах, если да, попробуйте выполнить следующее.

awk 'match($0,/snp_[0-9]+ [0-9]+/){value=substr($0,RSTART,RLENGTH);sub(" ","_",value);print value}'  Input_file
0 голосов
/ 22 января 2019

Если вы хотите попробовать Perl.Обратите внимание, что при этом сохраняются пробелы между другими столбцами, как в примере ввода.

$ cat anika.txt
 snp_CHR      POS HG00096 HG00097 HG00099 HG00100 HG00101 HG00102 HG00103
   snp_3 47609552       0       1       1       1       1       0       1
   snp_3 47614413       0       1       1       1       1       0       1
   snp_3 47616151       0       1       1       1       1       0       1
   snp_3 47616155       0       1       1       1       1       0       1
   snp_3 47617504       0       1       1       1       1       0       1
   snp_3 47617679       0       1       1       1       1       0       1

$ perl -pe 's/^\s*//g;  s/\s/_/; s/^\S+\s+\S+/ID/ if $.==1' anika.txt
ID HG00096 HG00097 HG00099 HG00100 HG00101 HG00102 HG00103
snp_3_47609552       0       1       1       1       1       0       1
snp_3_47614413       0       1       1       1       1       0       1
snp_3_47616151       0       1       1       1       1       0       1
snp_3_47616155       0       1       1       1       1       0       1
snp_3_47617504       0       1       1       1       1       0       1
snp_3_47617679       0       1       1       1       1       0       1

$
0 голосов
/ 21 января 2019

это должно сделать:

awk '{$1=(NR==1?"ID":$1"_"$2); $2=""}1' file

будет дополнительный пробел, который впоследствии можно будет нормализовать при необходимости.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...