для циклов для поиска нескольких текстов из родительского файла в несколько файлов одной командой

Podría usar la expansión de shell en lugar de globbing:

for file in lesson{1..10}.mp4;do
       read line
       mv -v "${file}" "${line}"
done < rename.txt

Aunque esto parece bastante propenso a errores, si tiene muchos archivos con los que necesita hacer esto, puede hacer coincidir el número en el nombre del archivo con el número al comienzo de la línea en el archivo de cambio de nombre. Algo así como:

for file in *.mp4;do
       num=$(echo "${file}" | sed -E 's/^lesson([0-9]+).mp4$/\1/')
       line=$(grep -E "^ *${num}\." rename.txt)
       mv -v "${file}" "${line}"
done

De esta manera, no debería importar en qué orden está el archivo rename.txt, y no importa en qué orden el shell agrega los nombres de archivo.

1
05.04.2019, 13:31
1 ответ

Формат Fasta не требует, чтобы все последовательности располагались на одной строке. На самом деле, это даже не является обычным явлением, поскольку большинство биологических последовательностей длинные. Таким образом, ваш grepне будет работать в любых случаях, когда для идентификатора используется более одной строки последовательности. Кроме того, ваша команда grepсоздаст файл с именем Sphingopyxis, а не файл с именем Sphingopyxis alaskensis RB2256.fa.

В любом случае, вы можете сделать что-то подобное, чтобы получить каждую последовательность в файле с именами после вида:

awk -F'[][]' '/>/{n=$2}; {print >> n".fa"}' *.fa 

Тем не менее, я настоятельно рекомендую вам не использовать пробелы в именах ваших файлов, так как это только усложнит вам жизнь. Более безопасным подходом будет:

awk -F'[][]' '/>/{n=$2; gsub(/ /,"_",n)}; {print >> n".fa"}' *.fa 

gsubзаменяет все пробелы в названии вида на _, в результате чего эти файлы:

Leptospirillum_ferriphilum_ML-04.fa  Sphingopyxis_alaskensis_RB2256.fa

Обратите внимание, что оба описанных выше подхода могут иметь дело с многострочными -последовательностями строк.

2
28.04.2021, 23:35

Теги

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