将文件名附加到行尾

Append file names to the end of lines

我有很多 fasta 文件,想将文件名附加到行尾(header 行)。我知道如何通过 sed 一个接一个地完成,但正在寻找一个更好的解决方案来处理许多文件。

File1.txt
>1
ACGTA

File2.txt
>2
GTCA

预期结果:

File1.txt
>1_File1
ACGTA

File2.txt
>2_File2
GTCA

这适用于在 OSX 中使用 sed 的单个文件:

sed -i.bak '/>.*$/ s/$/_File1/' File1.txt

谢谢

您可能需要根据文件名更改表达式,但基本上您想遍历所有文件

    #!/bin/bash
    for file in *.txt
    do
      #just for echo the current 'file' var for testing
      echo "$file"
      sed -i.bak '/>.*$/ s/$/_"$file"/' $file
    done

您可以使用 Perl 的就地编辑功能:

perl -i.bak -p0e '$ARGV =~ s/\..*//; s/>.*/$&_$ARGV/' File*.txt

您可以使用这个简单的 for 循环:

for f in *.txt; do
   sed -i '' 's/^>.*/&_'"${f%.*}"'/' "$f"
done

"${f%.*}" 将从文件名中删除扩展名。