bash 脚本中的 sed 故障排除

bash 脚本中的 sed 故障排除

我遇到以下有关 sed 命令的问题。我想做的是:

sed '1 d' filename.fa | sed "1i\>filename\n" > filename_Edited.fa

其中文件第一行被替换为“>文件名”。此操作分两步完成:删除第一行,然后插入包含所需“>文本”的新行。如果直接在控制台中输入该命令(不带变量),则该命令的工作方式与上面所写的相同。但是,我需要将此命令集成到以下脚本中,其中文件名现在取决于变量:

#!/bin/bash

CODE=`cut -c 7-21 Data.txt`

cd ../FASTA_SEC/
 for i in ${CODE}
 do
 sed '1 d' ${CODE}.fa | sed "1i\>${CODE}\n" > ${CODE}_Edited.fa
 done

当为每个 for 循环迭代运行此脚本时,我收到以下错误:

try: line 8: ${CODE}_Edited.fa: ambiguous redirect

我不明白 sed sintaxis 或整个脚本有什么问题,显然它应该可以工作,但不能。有什么线索吗?

我还尝试运行不带管道部分的脚本,仅执行 sed 从文本中删除第一行:

#!/bin/bash

CODE=`cut -c 7-21 Data.txt`

cd ../FASTA_SEC/
 for i in ${CODE}
 do
 sed '1 d' ${CODE}.fa > ${CODE}_Edited.fa
 done

但是,它再次返回之前的错误!

谢谢你的帮助!

**.fa 格式称为 fasta,是一种用于 DNA 序列的纯文本格式

答案1

sed不使用前缀可能更简单,而是cat

#!/bin/bash
header=$(mktemp)
scratch=$(mktemp)
trap "rm -f $header $scratch" EXIT

cd ../FASTA_SEC/
for CODE in $(cut -c 7-21 Data.txt); do
    echo ">${CODE}_" > $header
    if [[ -r "${CODE}.fa" ]]; then
        sed '1d' "${CODE}.fa" > $scratch
        cat $header $scratch > ${CODE}_Edited.fa
    fi
done

相关内容