shell 中的 Sed 函数应用于目录中的所有 .gff 文件

Sed function in shell applied to all .gff files in a directory

我正在处理 .gff3 文件,试图删除目录中许多文件底部的重叠序列。 contig 序列与文件的其余部分用 ##FASTA 分开,我想删除下面的所有内容(DNA 序列,FASTA 格式)。

此脚本适用于一个文件:

sed '/^##FASTA$/,$d' file1.gff > file1_altered.gff

但是当我尝试将它应用于目录中的所有文件时我失败了:

for F in directory/input/*; do
   N=$(basename $F) sed '/^##FASTA$/,$d' ${F} > directory/output/$N.gff
done

感谢任何帮助!

您在 N=$(basename $F) 后少了一个分号。它的写法是它只是一个一次性赋值,即N在重定向中使用时为空。

如果使用 shell 的内置字符串处理,则可以完全避免使用 basename${F##*/} 删除匹配 */.[=16 的最长左侧部分=]

 for F in directory/input/*; do
   sed '/^##FASTA$/,$d' "${F}" > "directory/output/${F##*/}.gff"
 done