Q: "Filter the result of dict2items based on a specific key."
A :Используйте selectattr
. Например
{{ mydict|dict2items|selectattr('key', 'regex', '^(foo)|(bar)$')|list }}
Использование 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
С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» также.