如何只保留一行的第二个字段并打印这一行和下一行?

问题描述 投票:0回答:4

我有一个包含 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
linux bash fasta
4个回答
0
投票

您可以简单地定位以

>
开头的行:

awk -F ',' '/^>/ { $0 = ">" $2 } 1' file.fasta

输出:

>TRINITY_DN80808_c0_g1_i1
LDSGALVQIHSNGIKHISDRVYEWVSDGIITHCACNPRQIVIATTNEIIYFELDINGQLNEYSERREMPAQVQAMALGPIPPSQVRSRFLAVTLSDQTVRIVSLDPQDCLQPLSMQALPATAESVCIIEASFGDDTYDTSLYLNIGLKNGVLLRTSLDSVTGDLSDTRTRYLGSKPVKLFRVIIANCPAILAVSSRSWLCYY
>TRINITY_DN80808_c0_g2_i1
LTLGRFATRLSDLFLVVGVSTSLILNPRVSNGGIFYTFAVEFYGSMKLQILHKTTVEEVPGAVLTFQGRIVAGVGNLLRVYEMGKQKLLRKCENKRIPSLI

0
投票
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

0
投票
$ awk -F',' '$0=(/^>/ ? ">" $2 : $0)' input
$ awk '$0=gensub(/^>([^,]*),([^,]*),(.*)/,">\\2",1)' input

>TRINITY_DN80808_c0_g1_i1
LDSGALVQIHSNGIKHISDRVYEWVSDGIITHCACNPRQIVIATTNEIIYFELDINGQLNEYSERREMPAQVQAMALGPIPPSQVRSRFLAVTLSDQTVRIVSLDPQDCLQPLSMQALPATAESVCIIEASFGDDTYDTSLYLNIGLKNGVLLRTSLDSVTGDLSDTRTRYLGSKPVKLFRVIIANCPAILAVSSRSWLCYY
>TRINITY_DN80808_c0_g2_i1
LTLGRFATRLSDLFLVVGVSTSLILNPRVSNGGIFYTFAVEFYGSMKLQILHKTTVEEVPGAVLTFQGRIVAGVGNLLRVYEMGKQKLLRKCENKRIPSLI

0
投票

您可以使用 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
© www.soinside.com 2019 - 2024. All rights reserved.