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

Сводка. У меня есть 1.txt со следующим порядком:

HLA-A1
HLA-A2
HLA-A3
HLA-A4
.
.
.

И еще 2.txt с порядком, как (номер строки = "2/3" является константой, только экзонстрока изменена)

exon 1..2
/number="2"
exon 3..4
/number="3"

exon 6..7
/number="2"
exon 4..7
/number="3"

exon 9..31
/number="2"
exon 25..134
/number="3"

exon...

Как я могу использовать команду merge или другую команду для объединения 5 строк в 2.txt с 1 строкой в ​​1.txt, чтобы конечный результат выглядел как:

HLA-A1 exon 1..2 /number="2" exon 3..4 /number="3"
HLA-A2 exon 6..7 /number="2" exon 4..7 /number="3"
HLA-A3 exon 9..31 /number="2" exon 25..134 /number="3"
HLA-A4 ...
.
.

Большое спасибо за вашу помощь!

Ответы [ 2 ]

0 голосов
/ 12 октября 2019

Выучи awk и получи программу, сынок:

$ awk 'NR==FNR{a[FNR]=$0;next}{print a[FNR],$1,$2,$3,$4}' file1 RS="" FS="\n" file2

Вывод:

HLA-A1 exon 1..2 /number="2" exon 3..4 /number="3"
HLA-A2 exon 6..7 /number="2" exon 4..7 /number="3"
HLA-A3 exon 9..31 /number="2" exon 25..134 /number="3"
HLA-A4 exon...   
0 голосов
/ 12 октября 2019

Вы можете использовать команду paste для объединения файлов построчно.

Не могли бы вы попробовать:

paste -d " " 1.txt <(perl -0777 -pe 's/(?<!\n)\n(?!$)/ /g' 2.txt)

1.txt:

HLA-A1
HLA-A2
HLA-A3

2.txt:

exon 1..2
/number="2"
exon 3..4
/number="3"

exon 6..7
/number="2"
exon 4..7
/number="3"

exon 9..31
/number="2"
exon 25..134
/number="3"

Вывод:

HLA-A1 exon 1..2 /number="2" exon 3..4 /number="3"
HLA-A2 exon 6..7 /number="2" exon 4..7 /number="3"
HLA-A3 exon 9..31 /number="2" exon 25..134 /number="3"

[Объяснение]

  • Сценарий perl переформатирует 2.txt путем замены одной новой строкис пробелами. (Будет несколько способов сделать это)
  • Синтаксис <(list) - это process substitution, а вывод list передается команде paste в качестве второго аргумента. Механизм избавляет вас от создания временного файла.

Надеюсь, это поможет.

...