如何使用 merge 命令将此文本文件中的 5 行与另一个文本文件中的 1 行合并?



总结 我有一个 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 行.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 ...
.
.

非常感谢您的帮助!

学习 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...   

您可以使用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命令。该机制使您免于创建临时文件。

希望这有帮助。

最新更新