Это не извлечение, потому что вы использовали опцию -v
, которая указывает unzip
показывать вам только каталог архива, не извлекая его.
Поскольку параметр -d
имеет смысл только при извлечении, он предупреждает вас, что игнорирует его, но ошибается в сторону осторожности и не извлекает.
С GNU sort
плюс POSIX awk
иcut
:
awk '/^>/{key=$1} {print key, $0}' file | sort -k1,1 -s | cut -d' ' -f2-
Это работает, потому что мы можем использовать опцию сортировки GNU-s
(«стабильная сортировка» ), чтобы обеспечить сохранение исходного порядка строк в каждом блоке вместо того, чтобы печатать и дополнительно сортировать исходные номера строк, как в следующем примере. пример.
Как вариант, со всеми инструментами POSIX/стандартными UNIX:
awk '/^>/{key=$1} {print key, NR, $0}' file | sort -k1,1 -k2,2n | cut -d' ' -f3-
Преимущество этого варианта в том, что он будет работать на всех системах UNIX.
Оба вышеперечисленных варианта имеют преимущество по сравнению с приведенным нижеgawk
-единственным вариантом, заключающимся в том, что awk
не нужно хранить весь входной файл в памяти, поэтому он будет работать даже для массивных входных файлов -только sort
в этом конвейере должен обрабатывать весь файл, и для этого он использует пейджинг по запросу и т. д.
Наконец, с GNU awk дляsorted_in
(см.https://www.gnu.org/software/gawk/manual/gawk.html#Controlling-Scanning):
awk '
/^>/{key=$1} {vals[key]=vals[key] $0 ORS}
END { PROCINFO["sorted_in"]="@ind_str_asc"; for (key in vals) printf "%s", vals[key] }
' file
Последний вариант действительно предпочтительнее, только если вы делаете это как промежуточную часть какого-нибудь более крупного awk
скрипта, и поэтому использование внешней оболочки для сортировки является менее желательным вариантом.
При сортировке и сортировке GNU предполагается, что нулевые байты не могут появляться в вашем файле:
sed 's/^>/\x00&/' file | sort -z | tr -d '\0'
Это разделяет блоки, начинающиеся с >
, нулевым байтом, затем использует опцию -z
/ --zero-terminated
сортировки GNU для лексикографической сортировки записей, затем tr
удаляет нулевые байты.
Это та же основная идея, что и хитрый \0
трюк гостя , но не требует инструментов GNU:
$ perl -pe '/>/ ? s/\n/\t/ : s/\n//; ' foo.fa | sort | perl -pe 's/(?<=.)>/\n>/g; y/\t/\n/' | fold -w 60
>Ipunensis_00386 Yfr1
GCGGAGACGAAAGTTTCCGTTCACTCCTCACACCACACTCCGCCCAAATCATTGATTTGG
GCGGTT
>Ipunensis_00401 tRNA-Gly(gcc)
GCGGGTATAGCTCAGTGGTAGAGCGTCACCTTGCCAAGGTGAATGTCGCGCGTTCGAATC
GCGTTACCCGCT
>Ipunensis_00001 transposase IS4 family protein
ATGCAGAAGTTTCAGGGCATCCACTGGGTCAACCTAGACGGGCAGCACCAGGTTAGCAAT
CTCAGTGATGAGCGACGCTTAATCATCCACCTCTTGGGGCCACCTGTTGAGCGCTACTAC
CATGCCCCTGGTTAA
>Ipunensis_00002 Photosystem I assembly protein Ycf3
ATGCGTCACCCCGCCAAGTTACTCGGGTTAGTCACTCTCACCAGTATGCTTACGCTGGCT
>Ipunensis_00003 Cell wall-associated protease
ATGAAACGTTTTCTGACCAGTCTTTTGCTGACGGGCCTGCTTTGGCATAGTGGGGGCAGC
GTTGGGGTTGGGAGAGGTGCGATCGCACAAACCCAGTCCACCCCAGACCTCTACTACACC
>Ipunensis_00004 Photosystem I assembly protein Ycf3
TTGACCTGCGGCCCGCAGCCCTACCTGCCCAACCTGACTCCAGAAATTCCCATGATCTAC
CGCCTCTCGTCTCCCGGATTTTTGCTGGCGCTGCTGCTGCTATCTGCCGTCGATCCGGCA
>Ipunensis_00226 tRNA-Leu(gag)
TGCGGATGTGGTGGAACTGGTAGACACGCACGTTTGAGGGGCGTGTGGCTTACGCCTTGC
GAGTTCGAGTCTCGCCATCCGCAT
>Ipunensis_00045 tRNA-Ala(cgc)
GGGGAATTAGCTCAGCTGGTAGAGCGCTGCGATCGCACCGCAGAGGTCAGGAGTTCGAAT
CTCCTATTCTCCA
>Ipunensis_00357 glnA
ATCGTTCATCTCTTCAAACTGTCAAAGCTACTTACAAAAGCTACAGACGCACCAAGAGAC
GGAAGTAGGGGTCTGATCCCCCCGAAGGAACGCGCC
>Ipunensis_00403 tRNA-Gly(gcc)
GCGGGTATAGCTCAGTGGTAGAGCGTCACCTTGCCAAGGTGAATGTCGCGCGTTCGAATC
Первая команда perl
заменит новые строки символом \t
в строках, содержащих >
, и ничего в строках, в которых его нет. Это помещает идентификатор и последовательность в одну строку, разделенную символом табуляции.
Затем он передается в sort
, а затем второй perl, который заменяет >
новой строкой, но только если перед ними есть другой символ (, чтобы избежать добавления дополнительной новой строки перед первой записью ). Это конвертирует обратно в формат, подобный fasta -.
Наконец, мы пропускаем вывод через fold -w 60
, чтобы получить стандартный 60 -char формат fasta. Обратите внимание, однако, что это также приведет к сворачиванию строки идентификатора, если у вас есть строки идентификатора с более чем 60 символами. Если это проблема, вы можете попробовать два awk
сценария, которые я опубликовал ранее , и выполнить:
$ FastaToTbl foo.fa | sort | TblToFasta
>Ipunensis_00001 transposase IS4 family protein
ATGCAGAAGTTTCAGGGCATCCACTGGGTCAACCTAGACGGGCAGCACCAGGTTAGCAAT
CTCAGTGATGAGCGACGCTTAATCATCCACCTCTTGGGGCCACCTGTTGAGCGCTACTAC
CATGCCCCTGGTTAA
>Ipunensis_00002 Photosystem I assembly protein Ycf3
ATGCGTCACCCCGCCAAGTTACTCGGGTTAGTCACTCTCACCAGTATGCTTACGCTGGCT
>Ipunensis_00003 Cell wall-associated protease
ATGAAACGTTTTCTGACCAGTCTTTTGCTGACGGGCCTGCTTTGGCATAGTGGGGGCAGC
GTTGGGGTTGGGAGAGGTGCGATCGCACAAACCCAGTCCACCCCAGACCTCTACTACACC
>Ipunensis_00004 Photosystem I assembly protein Ycf3
TTGACCTGCGGCCCGCAGCCCTACCTGCCCAACCTGACTCCAGAAATTCCCATGATCTAC
CGCCTCTCGTCTCCCGGATTTTTGCTGGCGCTGCTGCTGCTATCTGCCGTCGATCCGGCA
>Ipunensis_00045 tRNA-Ala(cgc)
GGGGAATTAGCTCAGCTGGTAGAGCGCTGCGATCGCACCGCAGAGGTCAGGAGTTCGAAT
CTCCTATTCTCCA
>Ipunensis_00226 tRNA-Leu(gag)
TGCGGATGTGGTGGAACTGGTAGACACGCACGTTTGAGGGGCGTGTGGCTTACGCCTTGC
GAGTTCGAGTCTCGCCATCCGCAT
>Ipunensis_00357 glnA
ATCGTTCATCTCTTCAAACTGTCAAAGCTACTTACAAAAGCTACAGACGCACCAAGAGAC
GGAAGTAGGGGTCTGATCCCCCCGAAGGAACGCGCC
>Ipunensis_00386 Yfr1
GCGGAGACGAAAGTTTCCGTTCACTCCTCACACCACACTCCGCCCAAATCATTGATTTGG
GCGGTT
>Ipunensis_00401 tRNA-Gly(gcc)
GCGGGTATAGCTCAGTGGTAGAGCGTCACCTTGCCAAGGTGAATGTCGCGCGTTCGAATC
GCGTTACCCGCT
>Ipunensis_00403 tRNA-Gly(gcc)
GCGGGTATAGCTCAGTGGTAGAGCGTCACCTTGCCAAGGTGAATGTCGCGCGTTCGAATC