我有一个包含 2 行的 fasta 格式的文件:
不知道用什么简单的命令?你能帮帮我吗?
输入
>TRINITY_DN80808_c0_g1,TRINITY_DN80808_c0_g1_i1,g.1,m.1 type:internal len:692 gc:universal TRINITY_DN80808_c0_g1_i1:2-2074(+)
LDSGALVQIHSNGIKHISDRVYEWVSDGIITHCACNPRQIVIATTNEIIYFELDINGQLNEYSERREMPAQVQAMALGPIPPSQVRSRFLAVTLSDQTVRIVSLDPQDCLQPLSMQALPATAESVCIIEASFGDDTYDTSLYLNIGLKNGVLLRTSLDSVTGDLSDTRTRYLGSKPVKLFRVIIANCPAILAVSSRSWLCYY
>TRINITY_DN80808_c0_g2,TRINITY_DN80808_c0_g2_i1,g.2,m.2 type:5prime_partial len:329 gc:universal TRINITY_DN80808_c0_g2_i1:2-988(+)
LTLGRFATRLSDLFLVVGVSTSLILNPRVSNGGIFYTFAVEFYGSMKLQILHKTTVEEVPGAVLTFQGRIVAGVGNLLRVYEMGKQKLLRKCENKRIPSLI
期望的输出
>TRINITY_DN80808_c0_g1_i1
LDSGALVQIHSNGIKHISDRVYEWVSDGIITHCACNPRQIVIATTNEIIYFELDINGQLNEYSERREMPAQVQAMALGPIPPSQVRSRFLAVTLSDQTVRIVSLDPQDCLQPLSMQALPATAESVCIIEASFGDDTYDTSLYLNIGLKNGVLLRTSLDSVTGDLSDTRTRYLGSKPVKLFRVIIANCPAILAVSSRSWLCYY
>TRINITY_DN80808_c0_g2_i1
LTLGRFATRLSDLFLVVGVSTSLILNPRVSNGGIFYTFAVEFYGSMKLQILHKTTVEEVPGAVLTFQGRIVAGVGNLLRVYEMGKQKLLRKCENKRIPSLI
您可以简单地定位以
>
开头的行:
awk -F ',' '/^>/ { $0 = ">" $2 } 1' file.fasta
输出:
>TRINITY_DN80808_c0_g1_i1
LDSGALVQIHSNGIKHISDRVYEWVSDGIITHCACNPRQIVIATTNEIIYFELDINGQLNEYSERREMPAQVQAMALGPIPPSQVRSRFLAVTLSDQTVRIVSLDPQDCLQPLSMQALPATAESVCIIEASFGDDTYDTSLYLNIGLKNGVLLRTSLDSVTGDLSDTRTRYLGSKPVKLFRVIIANCPAILAVSSRSWLCYY
>TRINITY_DN80808_c0_g2_i1
LTLGRFATRLSDLFLVVGVSTSLILNPRVSNGGIFYTFAVEFYGSMKLQILHKTTVEEVPGAVLTFQGRIVAGVGNLLRVYEMGKQKLLRKCENKRIPSLI
awk -F',' 'NR % 2 { $0 = ">"$2 } { print }' input_file
-F','
)NR % 2
仅在 ODD 行上执行以下操作
{ $0 = ">"$2 }
将行设置为“>
+ col 2”中的内容{ print }
打印完整结果input_file
输入文件的路径输出:
>TRINITY_DN80808_c0_g1_i1
LDSGALVQIHSNGIKHISDRVYEWVSDGIITHCACNPRQIVIATTNEIIYFELDINGQLNEYSERREMPAQVQAMALGPIPPSQVRSRFLAVTLSDQTVRIVSLDPQDCLQPLSMQALPATAESVCIIEASFGDDTYDTSLYLNIGLKNGVLLRTSLDSVTGDLSDTRTRYLGSKPVKLFRVIIANCPAILAVSSRSWLCYY
>TRINITY_DN80808_c0_g2_i1
LTLGRFATRLSDLFLVVGVSTSLILNPRVSNGGIFYTFAVEFYGSMKLQILHKTTVEEVPGAVLTFQGRIVAGVGNLLRVYEMGKQKLLRKCENKRIPSLI
$ awk -F',' '$0=(/^>/ ? ">" $2 : $0)' input
$ awk '$0=gensub(/^>([^,]*),([^,]*),(.*)/,">\\2",1)' input
>TRINITY_DN80808_c0_g1_i1
LDSGALVQIHSNGIKHISDRVYEWVSDGIITHCACNPRQIVIATTNEIIYFELDINGQLNEYSERREMPAQVQAMALGPIPPSQVRSRFLAVTLSDQTVRIVSLDPQDCLQPLSMQALPATAESVCIIEASFGDDTYDTSLYLNIGLKNGVLLRTSLDSVTGDLSDTRTRYLGSKPVKLFRVIIANCPAILAVSSRSWLCYY
>TRINITY_DN80808_c0_g2_i1
LTLGRFATRLSDLFLVVGVSTSLILNPRVSNGGIFYTFAVEFYGSMKLQILHKTTVEEVPGAVLTFQGRIVAGVGNLLRVYEMGKQKLLRKCENKRIPSLI
您可以使用 sed 的 substitute 命令,并且只在以右尖括号开头的行上应用替换。替换只是删除第一个逗号之后的所有内容,包括逗号本身。
sed '/^>/s/,.*//' file.fasta
演示:
$ sed '/^>/s/,.*//' <<FASTA
>TRINITY_DN80808_c0_g1,TRINITY_DN80808_c0_g1_i1,g.1,m.1 type:internal len:692 gc:universal TRINITY_DN80808_c0_g1_i1:2-2074(+)
LDSGALVQIHSNGIKHISDRVYEWVSDGIITHCACNPRQIVIATTNEIIYFELDINGQLNEYSERREMPAQVQAMALGPIPPSQVRSRFLAVTLSDQTVRIVSLDPQDCLQPLSMQALPATAESVCIIEASFGDDTYDTSLYLNIGLKNGVLLRTSLDSVTGDLSDTRTRYLGSKPVKLFRVIIANCPAILAVSSRSWLCYY
>TRINITY_DN80808_c0_g2,TRINITY_DN80808_c0_g2_i1,g.2,m.2 type:5prime_partial len:329 gc:universal TRINITY_DN80808_c0_g2_i1:2-988(+)
LTLGRFATRLSDLFLVVGVSTSLILNPRVSNGGIFYTFAVEFYGSMKLQILHKTTVEEVPGAVLTFQGRIVAGVGNLLRVYEMGKQKLLRKCENKRIPSLI
FASTA
>TRINITY_DN80808_c0_g1
LDSGALVQIHSNGIKHISDRVYEWVSDGIITHCACNPRQIVIATTNEIIYFELDINGQLNEYSERREMPAQVQAMALGPIPPSQVRSRFLAVTLSDQTVRIVSLDPQDCLQPLSMQALPATAESVCIIEASFGDDTYDTSLYLNIGLKNGVLLRTSLDSVTGDLSDTRTRYLGSKPVKLFRVIIANCPAILAVSSRSWLCYY
>TRINITY_DN80808_c0_g2
LTLGRFATRLSDLFLVVGVSTSLILNPRVSNGGIFYTFAVEFYGSM>TRINITY_DN80808_c0_g1
KLQILHKTTVEEVPGAVLTFQGRIVAGVGNLLRVYEMGKQKLLRKCENKRIPSLI
LDSGALVQIHSNGIKHISDRVYEWVSDGIITHCACNPRQIVIATTNEIIYFELDINGQLNEYSERREMPAQVQAMALGPIPPSQVRSRFLAVTLSDQTVRIVSLDPQDCLQPLSMQALPATAESVCIIEASFGDDTYDTSLYLNIGLKNGVLLRTSLDSVTGDLSDTRTRYLGSKPVKLFRVIIANCPAILAVSSRSWLCYY