while 使用 sed 循环。用另一个文件中的文本替换一个文件中的匹配模式
while loop with sed. Substitute matching pattern in one file with text from another
我想将文本文件 (file1) 中的字符串添加到第二个文本文件 (file2)。 file1 中的字符串应在每个大于符号 >
之后按顺序添加到 file2。 file2 中有 9 个大于符号,file1 中有 9 个字符串。 File1 在第 1-9 行的第 1 列中包含 9 个不同的字符串。像这样:
...
sctC_
sctJ_
sctV_
...
这是 sed 的 while 循环 我试图将字符串添加到 file2:
while IFS=$'\t' read f1 f2 ; do sed "s/^>/&$f2/" ; done < <(paste file2 file1)
但是,只有第一个字符串被添加到 file2 中,第一行从 file2 中删除:
MRNVLYAFLLTLYRGFCWSTVLLGMLPMAHAVTPPEWNKGAYAYSAEQTLLSTILIDFANSHGVELVMDN sctJ_
LKDTLVEAKIRAETPAAFLDRLALEHRFQWFVYNHTLYVSSQDTQASIRLEISPDAAPDLKQALSGIGLL sctV_
DPRFGWGELPEEGVVLVTGPQTYIDLIRNFSQQREKQDERRKVMIFPLRFASVSDRTLQYRDQRIVIPGV sctN_
ATILSELMDGQRPPPTGASGPTDAVPDSAMEAMRENTRAMLTRLATRNNPARSTDENGRLVLNGRISADV sctQ_
RNNALLVRDDEKRREEYQQLVEQIDVPQNLVNIDAIILDVDRTALSRLEANWQGTLGNVSAGSTMMMGRS sctR_
TLFVSDFKRFFADIQALEGEGTASIVANPSVLTLENQPAIVDFSRTAFITATGERVAQIQPITAGTSLQV sctS_
TPRVVGQDGPRSIQLVIDIEDGRVETGRDGEATGVKRGTVSTQALIGENRALVLGGFHVEESGDRDHRIP sctT_
LLGDIPWLGRLFTSTRHEVSRRERLFILTPHLIGDQTDPTRYVSAENRHQINDVMNRVSQRNGKHDLYSL sctU_
VENALRDLAGKQLPAGFQSETRGTRLSEVCRSQPGLVYDSNRYQWYGNGSIRLTVGVVRNSGTRIQRFDE
SVCGSNRTLAVAAWPKTTLAPGESTEVFLALQTLSSTAPPRRSLLASY
>sctC_12a_02741 hypothetical protein
MKTDLRALFLLLSLLLMGCGDPIELNRGLSENDANEVIAALGRYQIAAEKRVDKTGVTLIIDAKNMERAV
NILNAAGLPRQSRTNLGEVFQKSGVISTPLEERARYIYALSQEVEATLTQIDGVLVARVHVVLPERIAPG
EPVQPASAAVFIKYQPELEPDSVEPRIRRMVASSIPGLSGKNDKDLSIVFVPAEPYQDTIPVVTLGPFTL
TPQEMVRWQWTAGLMGALIIGLLAWRLGKPYMRQWQQNRADARQQR
>sctC_12a_02750 Invasion protein InvA
MNLVIIWLNRIALSAMQRSEVVGAVIVMSIVFMMIIPLPTSLIDVLIAFNICVSSLLIVLAMYLPKPLAF
STFPAVLLLTTMFRLALSISTTRQILLQQDGGHIVEAFGNYVVGGNLAVGLVIFLILTVVNFLVITKGSE
RVAEVAARFTLDAMPGKQMSIDSDLRAGLIEAHQARQRRDNLAKESQLFGAMDGAMKFVKGDAIAGLVIV
FINMIGGFAIGVLQHGMSAADAMHVYSVLTIGDGLIAQIPALLISLTAGMIITRVSAEGQPLDANIGREI
AEQLTSQPKAWIISALGMFGFALLPGMPSMVFMVISLASFSSGVFQLWRIKQQGILTHSQAEADNQPAEQ
NGHQDLRRFNPTRAYLLQFHPSMQGNPATLSLVQHIRRLRNRLVYQFGMTLPSFDIEFSDRLDEDEFQFG
VYEIPYVKATFVTERLAVHRSSFDQGELEDAIAGSTLRDEADWLWVSPMHPLLEQETCPRWAAGELILMR
MENAIHRSGAQFIGLQETKSILTWLESEQPELAQELQRIMPLSRFAGVLQRLASERIPLRSVRPIAEALI
EIGQHERDVHALTDYVRLALKAQICHQYSQQNTLHVWLLTPETEELLRDSLRQTQNETFFALTQDYAATL
LGQLRRAFPPSLPSTGQILVAQDLRTPLRVLLQEEFHHVPVLSFSELESHLSINVLGRFDLYEENTPFSA
>sctC_12a_02752 Type III secretion ATP synthase HrcN
MQTQAAIDFPLMTRWFQQQRRRLSDFAPVDLKGRIIGISGILLECSLPRARIGDLCLVERQDGSQVMAEV
VGFSPRNTFLSALGALDGIAQGAAVAPLYQPHCIQVSDRLFGSVLDGFGRALEDGGESAFVQPGELHGNA
QPVLGDAPPPTARPRIATPLPTGLRAIDGLLTLGQGQRVGIFAGAGCGKTTLLAELARNTPCDAIVFGLI
GERGRELREFLDHELDDDLRRRTVLVCSTSDRSSMERARAAFTATAIAEAYRAAGKQVLLIIDSLTRFAR
AQREIGLALGEPQGRGGLPPSVYTLLPRLVERAGQTQTGAITALYSVLIEQDSMNDPVADEVRSLIDGHI
VLTRRLAEQGHYPAIDVLASLSRTMSNVVDDGHNRHAGAVRRLMAAYKQVEMLIRLGEYQSGHDALTDSA
VNAQQDITRFLRQAMRDPMAYDDIQQQLAEVSAHAP
如何在 file2 的大于号之后递归地获取 file1 的字符串?
谢谢,
京东
我不确定我是否完全理解您的要求,但 Perl 应该可以轻松处理。将第一个文件读入一个数组,然后遍历第二个文件并使用该数组添加缺失的信息。
perl -we 'push @s, scalar <> until eof;
chomp @s;
s/(?<=^>)/shift @s/e, print while <>;
' file1 file2
我想将文本文件 (file1) 中的字符串添加到第二个文本文件 (file2)。 file1 中的字符串应在每个大于符号 >
之后按顺序添加到 file2。 file2 中有 9 个大于符号,file1 中有 9 个字符串。 File1 在第 1-9 行的第 1 列中包含 9 个不同的字符串。像这样:
...
sctC_
sctJ_
sctV_
...
这是 sed 的 while 循环 我试图将字符串添加到 file2:
while IFS=$'\t' read f1 f2 ; do sed "s/^>/&$f2/" ; done < <(paste file2 file1)
但是,只有第一个字符串被添加到 file2 中,第一行从 file2 中删除:
MRNVLYAFLLTLYRGFCWSTVLLGMLPMAHAVTPPEWNKGAYAYSAEQTLLSTILIDFANSHGVELVMDN sctJ_
LKDTLVEAKIRAETPAAFLDRLALEHRFQWFVYNHTLYVSSQDTQASIRLEISPDAAPDLKQALSGIGLL sctV_
DPRFGWGELPEEGVVLVTGPQTYIDLIRNFSQQREKQDERRKVMIFPLRFASVSDRTLQYRDQRIVIPGV sctN_
ATILSELMDGQRPPPTGASGPTDAVPDSAMEAMRENTRAMLTRLATRNNPARSTDENGRLVLNGRISADV sctQ_
RNNALLVRDDEKRREEYQQLVEQIDVPQNLVNIDAIILDVDRTALSRLEANWQGTLGNVSAGSTMMMGRS sctR_
TLFVSDFKRFFADIQALEGEGTASIVANPSVLTLENQPAIVDFSRTAFITATGERVAQIQPITAGTSLQV sctS_
TPRVVGQDGPRSIQLVIDIEDGRVETGRDGEATGVKRGTVSTQALIGENRALVLGGFHVEESGDRDHRIP sctT_
LLGDIPWLGRLFTSTRHEVSRRERLFILTPHLIGDQTDPTRYVSAENRHQINDVMNRVSQRNGKHDLYSL sctU_
VENALRDLAGKQLPAGFQSETRGTRLSEVCRSQPGLVYDSNRYQWYGNGSIRLTVGVVRNSGTRIQRFDE
SVCGSNRTLAVAAWPKTTLAPGESTEVFLALQTLSSTAPPRRSLLASY
>sctC_12a_02741 hypothetical protein
MKTDLRALFLLLSLLLMGCGDPIELNRGLSENDANEVIAALGRYQIAAEKRVDKTGVTLIIDAKNMERAV
NILNAAGLPRQSRTNLGEVFQKSGVISTPLEERARYIYALSQEVEATLTQIDGVLVARVHVVLPERIAPG
EPVQPASAAVFIKYQPELEPDSVEPRIRRMVASSIPGLSGKNDKDLSIVFVPAEPYQDTIPVVTLGPFTL
TPQEMVRWQWTAGLMGALIIGLLAWRLGKPYMRQWQQNRADARQQR
>sctC_12a_02750 Invasion protein InvA
MNLVIIWLNRIALSAMQRSEVVGAVIVMSIVFMMIIPLPTSLIDVLIAFNICVSSLLIVLAMYLPKPLAF
STFPAVLLLTTMFRLALSISTTRQILLQQDGGHIVEAFGNYVVGGNLAVGLVIFLILTVVNFLVITKGSE
RVAEVAARFTLDAMPGKQMSIDSDLRAGLIEAHQARQRRDNLAKESQLFGAMDGAMKFVKGDAIAGLVIV
FINMIGGFAIGVLQHGMSAADAMHVYSVLTIGDGLIAQIPALLISLTAGMIITRVSAEGQPLDANIGREI
AEQLTSQPKAWIISALGMFGFALLPGMPSMVFMVISLASFSSGVFQLWRIKQQGILTHSQAEADNQPAEQ
NGHQDLRRFNPTRAYLLQFHPSMQGNPATLSLVQHIRRLRNRLVYQFGMTLPSFDIEFSDRLDEDEFQFG
VYEIPYVKATFVTERLAVHRSSFDQGELEDAIAGSTLRDEADWLWVSPMHPLLEQETCPRWAAGELILMR
MENAIHRSGAQFIGLQETKSILTWLESEQPELAQELQRIMPLSRFAGVLQRLASERIPLRSVRPIAEALI
EIGQHERDVHALTDYVRLALKAQICHQYSQQNTLHVWLLTPETEELLRDSLRQTQNETFFALTQDYAATL
LGQLRRAFPPSLPSTGQILVAQDLRTPLRVLLQEEFHHVPVLSFSELESHLSINVLGRFDLYEENTPFSA
>sctC_12a_02752 Type III secretion ATP synthase HrcN
MQTQAAIDFPLMTRWFQQQRRRLSDFAPVDLKGRIIGISGILLECSLPRARIGDLCLVERQDGSQVMAEV
VGFSPRNTFLSALGALDGIAQGAAVAPLYQPHCIQVSDRLFGSVLDGFGRALEDGGESAFVQPGELHGNA
QPVLGDAPPPTARPRIATPLPTGLRAIDGLLTLGQGQRVGIFAGAGCGKTTLLAELARNTPCDAIVFGLI
GERGRELREFLDHELDDDLRRRTVLVCSTSDRSSMERARAAFTATAIAEAYRAAGKQVLLIIDSLTRFAR
AQREIGLALGEPQGRGGLPPSVYTLLPRLVERAGQTQTGAITALYSVLIEQDSMNDPVADEVRSLIDGHI
VLTRRLAEQGHYPAIDVLASLSRTMSNVVDDGHNRHAGAVRRLMAAYKQVEMLIRLGEYQSGHDALTDSA
VNAQQDITRFLRQAMRDPMAYDDIQQQLAEVSAHAP
如何在 file2 的大于号之后递归地获取 file1 的字符串?
谢谢,
京东
我不确定我是否完全理解您的要求,但 Perl 应该可以轻松处理。将第一个文件读入一个数组,然后遍历第二个文件并使用该数组添加缺失的信息。
perl -we 'push @s, scalar <> until eof;
chomp @s;
s/(?<=^>)/shift @s/e, print while <>;
' file1 file2