使用每个文件中第一个序列的ID自动重命名fasta文件

时间:2019-01-07 17:02:10

标签: bash sed rename file-rename fasta

我在同一目录中有多个具有单个序列的fasta文件。我想使用在fasta文件中存在的单个序列的标题来重命名每个fasta文件。当我运行代码时,我得到“替换模式未终止于(用户提供的代码)”

我的代码:

BEGIN TRANSACTION
<YOUR COMMAND>
COMMIT TRANSACTION

fasta文件:

#!/bin/bash

for i in /home/maryem/files/;
do 
  if [ ! -f $i ]; then 
     echo "skipping $i"; 
  else 
     newname=`head -1 $i | sed 's/^\s*\([a-zA-Z0-9]\+\).*$/\1/'`; 
     [ -n "$newname" ] ; 
      mv -i $i $newname.fasta || echo "error at: $i"; 
  fi; 
done | rename s/ // *.fasta

我不确定是否还有另一种方法可以用标头中的ID重命名每个文件??

1 个答案:

答案 0 :(得分:0)

鉴于ID是文件的第一个“单词”,您可以在包含fasta文件的目录中运行以下命令。

for f in *.fasta; do d="$(head -1 "$f" | awk '{print $1}').fasta"; if [ ! -f "$d" ]; then mv "$f" "$d"; else echo "File '$d' already exists! Skiped '$f'"; fi; done

信用:https://unix.stackexchange.com/a/13161