使用bash合并两个txt文件

使用bash合并两个txt文件,bash,Bash,我有: txt文件的拉取由许多字符串组成 和一个reference.txt(短)文件 我的bash脚本执行以下操作: 1) 在循环拉取txt文件时,它会对每个文件执行某些操作(不改变其组成),然后 2) 应将每个文件的合成与reference.txt的合成合并到指定位置 e、 g每个工作文件的结尾如下所示 ATOM 13703 HA GLN 100 83.311 32.648 23.654 0.1232 1.3870 ATOM 13704 HG2 GLN 100

我有: txt文件的拉取由许多字符串组成 和一个reference.txt(短)文件 我的bash脚本执行以下操作: 1) 在循环拉取txt文件时,它会对每个文件执行某些操作(不改变其组成),然后 2) 应将每个文件的合成与reference.txt的合成合并到指定位置

e、 g每个工作文件的结尾如下所示

ATOM  13703  HA  GLN   100      83.311  32.648  23.654  0.1232 1.3870
ATOM  13704  HG2 GLN   100      82.879  33.518  22.168  0.0203 1.4870
ATOM  13705  HB2 GLN   100      84.606  31.260  21.824  0.0452 1.4870
ATOM  13706 HE22 GLN   100      84.225  34.975  20.004  0.4304 0.6000
ATOM  13707  OE1 GLN   100      82.389  32.538  19.564 -0.6098 1.6612
ATOM  13708  NE2 GLN   100      83.817  34.212  19.506 -0.9574 1.8240
ATOM  13709 HE21 GLN   100      83.663  34.375  18.529  0.4304 0.6000
TER
END
在这里,我要替换reference.pdb全文中的最后一个字符串“END”

HETATM 5420 CU    CU A 559      54.926  67.840  66.647  1.00 47.11          CU  
HETATM 5421 MG    MG A 560      58.119  65.472  53.773  1.00 12.89          MG  
HETATM 5422 CA    CA A 561      78.459  57.926  52.401  1.00 22.70          CA 
HETATM 7924 CU    CU B 270      62.144  60.705  47.277  1.00 40.39          CU  
HETATM 7925 CU    CU B 271      60.809  60.526  45.118  1.00 44.84          CU
最终获得每个被删除文件的smth,如:

ATOM  13695  O   GLN   100      82.103  30.697  24.719 -0.8042 1.6612
ATOM  13696  CB  GLN   100      83.798  31.641  22.204 -0.0664 1.9080
ATOM  13697  CG  GLN   100      83.606  33.044  21.616 -0.0210 1.9080
ATOM  13698  CD  GLN   100      83.251  33.196  20.146  0.7093 1.9080
ATOM  13699  H   GLN   100      85.355  33.328  24.357  0.2681 0.6000
ATOM  13700  OXT GLN   100      83.889  29.761  24.981 -0.8042 1.6612
ATOM  13701  HG3 GLN   100      84.467  33.577  21.792  0.0203 1.4870
ATOM  13702  HB3 GLN   100      82.992  31.127  22.034  0.0452 1.4870
ATOM  13703  HA  GLN   100      83.311  32.648  23.654  0.1232 1.3870
ATOM  13704  HG2 GLN   100      82.879  33.518  22.168  0.0203 1.4870
ATOM  13705  HB2 GLN   100      84.606  31.260  21.824  0.0452 1.4870
ATOM  13706 HE22 GLN   100      84.225  34.975  20.004  0.4304 0.6000
ATOM  13707  OE1 GLN   100      82.389  32.538  19.564 -0.6098 1.6612
ATOM  13708  NE2 GLN   100      83.817  34.212  19.506 -0.9574 1.8240
ATOM  13709 HE21 GLN   100      83.663  34.375  18.529  0.4304 0.6000
TER
HETATM 5420 CU    CU A 559      54.926  67.840  66.647  1.00 47.11          CU  
HETATM 5421 MG    MG A 560      58.119  65.472  53.773  1.00 12.89          MG  
HETATM 5422 CA    CA A 561      78.459  57.926  52.401  1.00 22.70          CA 
HETATM 7924 CU    CU B 270      62.144  60.705  47.277  1.00 40.39          CU  
HETATM 7925 CU    CU B 271      60.809  60.526  45.118  1.00 44.84          CU
END

使用sed,在
END
字符串之前插入reference.pdb的内容:

sed '
/END/ {
r reference.pdb
a END
d
}
' workfile
编辑:

如果文件名存储在变量中,则sed命令必须用双引号括起来:

ref=reference.pdb
sed "
/END/ {
r $ref
a END
d
}
" workfile

使用sed,在
END
字符串之前插入reference.pdb的内容:

sed '
/END/ {
r reference.pdb
a END
d
}
' workfile
编辑:

如果文件名存储在变量中,则sed命令必须用双引号括起来:

ref=reference.pdb
sed "
/END/ {
r $ref
a END
d
}
" workfile

这很奇怪,但不管用。我把它放在sed中提供的循环中,但是我的reference.pdb是在变量sed'/END/{r${ref}a END d}'$output/${tit}\u pqr下定义的。pdb@user3470313我更新了。Sed命令必须双引号,以允许变量展开。并且不要像在你的评论中那样使用一行代码,
r
a
命令不能跟在同一行的其他命令后面。这很奇怪,但不起作用。我把它放在sed中提供的循环中,但是我的reference.pdb是在变量sed'/END/{r${ref}a END d}'$output/${tit}\u pqr下定义的。pdb@user3470313我更新了。Sed命令必须双引号,以允许变量展开。并且不要像在您的评论中那样使用单行线,
r
a
命令不能与同一行上的其他命令一起使用。跨站点复制的跨站点复制