Сохранить заголовок при объединении файлов в bash - PullRequest
0 голосов
/ 23 апреля 2020

У меня есть эти 2 разделенных табуляцией файла:

fileA.tsv

probeId    sample1_betaval    sample2_betaval    sample3_betaval
   a              1                  2                  3
   b              4                  5                  6
   c              7                  8                  9

fileB.tsv

probeId       region      gene
   a         intronic      tp53
   b         non-coding     NA 
   c         exonic         kras

Поскольку они уже отсортированы по probeId, я объединены оба файла:

join -j 1 fileA.tsv fileB.tsv -t $'\t' > complete.tsv

Проблема в том, что выходные данные не сохраняют заголовки:

   a              1                  2                  3           intronic    tp53
   b              4                  5                  6           non-coding   NA
   c              7                  8                  9            exonic      kras

В то время как мой желаемый вывод:

probeId    sample1_betaval    sample2_betaval    sample3_betaval     region     gene
   a              1                  2                  3           intronic    tp53
   b              4                  5                  6           non-coding   NA
   c              7                  8                  9            exonic      kras

Как мне этого добиться?

Ответы [ 2 ]

3 голосов
/ 23 апреля 2020

Не могли бы вы попробовать следующее (если вы согласны с этим).

awk '
FNR==NR{
  array[$1]=$0
  next
}
($1 in array){
  print array[$1],$2,$3
}
'  filea  fileb | column -t


РЕДАКТИРОВАТЬ: В случае OP имеет много столбцов в fileb и хочет распечатать все, кроме 1-го столбца, затем попробуйте выполнить следующее.

awk '
FNR==NR{
  array[$1]=$0
  next
}
($1 in array){
  val=$1
  $1=""
  sub(/^ +/,"")
  print array[val],$0
}
'  filea  fileb | column -t
2 голосов
/ 23 апреля 2020
Опция

Добавить --header, если это предусмотрено вашим соединением:

join --header -j 1 fileA.tsv fileB.tsv -t $'\t' > complete.tsv
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...