0

我有一个文本文件,例如:

>Tolten.WP_096573835.1
MSSPKSLLIRRARIILPNGELMVGDVLTRDRQIVEVAPEIYTPTPTTEIDAAGLTLLPGVIDPQVHFREPGLEHKEDLFTASCACAKGGVTSFLEMPNTRPLTTN
--
>Trivar.WP_011317016.1
MSSPQSLLIRGARILLPNGEFLLGDVLIRDRHIIEVGTEIVNTTPATEIDAKGLTLLPGVIDPQVHFREPGLEHKEDLFTASCACAKGGVTSFLEMPNTRPLTTS
--
>uniSU2.WP_085434158.1
MTQLLIRHAQILLPNGQFLLGDVLTQDGKILEVASEIAATDLSNIIDATGLTLLPGVIDPQVHFREPGLEHKEDLFTATCACAKGGVTSFLEMPNTRPLTTTQAA
--
>Chlfri.WP_016876644.1
MSETPLLDKVIKNVRVVRPNQHTIEKVDIGIKNGKFAQIAPQISPDQTKEVFDAKNLLGFPGVVDAHMHIGIYQPLAQDAVSESKAAAMGGVTTSLNYIRTGQYY
--
>Noslin.WP_099070767.1
MSEASLLDRVIKNVRVVRPHNDAIELLDLGIKDGKFARIASHISPDTAKEVFDAKNLLGFPGVVDAHMHIGIYQPLDKDAVTESKAAAMGGVTTSLNYIRTGQYY

我想创建多个文本文件,其内容介于每个“--”之间。文本文件将以“>”开头的字符串命名。

最后我会有这些文本文件:

Tolten.WP_096573835.1
Trivar.WP_011317016.1
uniSU2.WP_085434158.1
Chlfri.WP_016876644.1
Noslin.WP_099070767.1

具有以下内容:

Tolten.WP_096573835.1文本文件:

>Tolten.WP_096573835.1
  MSSPKSLLIRRARIILPNGELMVGDVLTRDRQIVEVAPEIYTPTPTTEIDAAGLTLLPGVIDPQVHFREPGLEHKEDLFTASCACAKGGVTSFLEMPNTRPLTTN

Trivar.WP_011317016.1文本文件:

>Trivar.WP_011317016.1
    MSSPQSLLIRGARILLPNGEFLLGDVLIRDRHIIEVGTEIVNTTPATEIDAKGLTLLPGVIDPQVHFREPGLEHKEDLFTASCACAKGGVTSFLEMPNTRPLTTS

uniSU2.WP_085434158.1

>uniSU2.WP_085434158.1
    MTQLLIRHAQILLPNGQFLLGDVLTQDGKILEVASEIAATDLSNIIDATGLTLLPGVIDPQVHFREPGLEHKEDLFTATCACAKGGVTSFLEMPNTRPLTTTQAA

Chlfri.WP_016876644.1文本文件:

>Chlfri.WP_016876644.1
    MSETPLLDKVIKNVRVVRPNQHTIEKVDIGIKNGKFAQIAPQISPDQTKEVFDAKNLLGFPGVVDAHMHIGIYQPLAQDAVSESKAAAMGGVTTSLNYIRTGQYY

>Noslin.WP_099070767.1文本文件:

>Noslin.WP_099070767.1
MSEASLLDRVIKNVRVVRPHNDAIELLDLGIKDGKFARIASHISPDTAKEVFDAKNLLGFPGVVDAHMHIGIYQPLDKDAVTESKAAAMGGVTTSLNYIRTGQYY

我知道 csplit 适用于这种事情:

csplit --suppress-matched original_text_file.txt '/^--/' '{*}'

但我无法正确命名文件。

有谁知道如何提供帮助?

提前致谢 :)

4

1 回答 1

1

恐怕csplit不能直接这样做,您只能使用“固定”格式更改文件名的前缀和后缀。没有什么能阻止您之后使用简单的循环进行重命名,例如:

$ csplit --suppress-matched original_text_file.txt '/^--$/' '{*}'
129
129
129
129
129
$ for f in xx*; do mv "$f" "`head -n 1 "$f" | cut -c 2-`"; done
$ ls -1
Chlfri.WP_016876644.1
Noslin.WP_099070767.1
original_text_file.txt
Tolten.WP_096573835.1
Trivar.WP_011317016.1
uniSU2.WP_085434158.1
$

您可以轻松地组合csplit和循环以获得单线:

csplit --suppress-matched original_text_file.txt '/^--$/' '{*}' && for f in xx*; do mv "$f" "`head -n 1 "$f" | cut -c 2-`"; done
于 2020-08-19T10:15:02.663 回答