переименовать заголовки нескольких мультифаст-файлов

Q: "Filter the result of dict2items based on a specific key."

A :Используйте selectattr. Например

{{ mydict|dict2items|selectattr('key', 'regex', '^(foo)|(bar)$')|list }}
1
14.01.2021, 18:33
2 ответа

Использование GNU sed в цикле for.

tmp=$(mktemp)
for sample in./P*; do
  knt=$(grep -c '^>' < "$sample") || continue
  seq -f ">${sample}_ctg%g" "$knt" > "$tmp"
  sed -e "/^>/R $tmp" -e '//d' < "$sample" > "$sample.fasta"
done
  • получить количество заголовков в данном образце файла.
  • Создайте добавляемые заголовки на основе имени файла образца и количества заголовков из предыдущего шага.
  • Замените каждую строку заголовка следующей строкой, считанной из созданного файла заголовков на предыдущем шаге.
0
18.03.2021, 22:36

Сawk:

awk 'FNR==1{ close(out); inc=0; fileName=substr(FILENAME,3); out=fileName".fasta" } 
     /^>/{ $0= ">"fileName"_ctg"(++inc) }
     { print > out }'./P*

FILENAME— переменная awk , которая содержит текущее имя входного файла обработки; мы устанавливаем его в fileName, чтобы избавиться от первого ./от него; префикс точка -косая черта в имени файла ./используется, чтобы избежать проблем с файлами с именами, подобными PANS=1_2, например, поскольку awkчитает такие строки как переменную ] когда они идут после кодов awk;

все, что заключено в двойные -кавычки "...", буквально является строкой;

++incпредшествует -инкрементному арифметическому выражению, которое используется для нумерации каждого заголовка и будет сброшено обратно к 0 для следующего входного файла с FNR==1, который мы использовали.

$0представляет всю строку/запись в awk, поэтому мы обновляем($0=...)те строки, которые начинаются с символа >, с символом «>», затем имя_файла , за которым следует Строка _ctgи возрастающий номер.

третья строка мы printкакое текущее значение строки соответствует имени файла, что его имя совпадает с текущим имя_файла читаем awk и добавляем в него строку «.fasta» также.

3
18.03.2021, 22:36

Теги

Похожие вопросы