【问题标题】:Automatically rename fasta files with the ID of the first sequence in each file使用每个文件中第一个序列的 ID 自动重命名 fasta 文件
【发布时间】:2019-06-02 08:55:12
【问题描述】:

我在同一个目录中有多个带有单个序列的 fasta 文件。我想用 fasta 文件中存在的单个序列的标题重命名每个 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

fasta 文件:

>NC_013361.1 Escherichia coli O26:H11 str. 11368 DNA, complete genome
AGCTTTTCATTCTGACTGCAATGGGCAATATGTCTCTGTGTGGATTAAAAAAAGAGTCTCTGACAGCAGCTTCTGAACTG
GTTACCTGCCGTGAGTAAATTAAAATTTTATTGACTTAGGTCACTAAATACTTTAACCAATATAGGCATAGCGCACAGAC
AGATAAAAATTACAGAGTACACAACATCCATGAAACGCATTAGCACCACCATTATCACCACCATCACCATTACCACAGGT

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

【问题讨论】:

  • 你有[ -n "$newname" ] 没有明显的原因。只是把它放在那里。此外,建议您使用$() 而不是反引号。 (它们可以嵌套。)
  • sed 命令似乎不起作用,因为您在行首没有匹配 >。您也不匹配似乎是 ID 一部分的 _.

标签: bash sed rename file-rename fasta


【解决方案1】:

鉴于 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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-11-24
    • 1970-01-01
    • 2014-08-21
    • 1970-01-01
    • 2017-07-09
    相关资源
    最近更新 更多