2016-03-31 15 views
2

私は多くのファイルを持っていて、ファイルの名前を行末に追加したい(ヘッダー行)。私はsedによって1 by 1を行う方法を知っていますが、多くのファイルに対してより良い解決策を探しています。ファイルの末尾にファイル名を追加する

File1.txt 
>1_File1 
ACGTA 

File2.txt 
>2_File2 
GTCA 

をこれはOSXでのsed使用して、単一のファイルのために動作します:

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

おかげ

答えて

0

あなたはループのために、この単純なを使用することができます。

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

"${f%.*}"は、ファイル名から拡張子を取り除きます。

+1

ありがとう!終日私は終わった.... – Ramon

+0

それはさらに短くすることができます: sed -i 's /^>.*/&_'${_.*}'/' * .txt – SaintHax

1

あなたのに応じて、式を変更する必要があるかもしれませんが期待何

File1.txt 
>1 
ACGTA 

File2.txt 
>2 
GTCA 

ファイル名ですが、基本的にはすべてのファイルを繰り返し処理します

#!/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 
+0

私はこれを得る:> 1 "$ file"。私は間違っていますか? – Ramon

+0

_ "$ file"を_ '$ file'に変更した後、ジョブを実行しましたが、行のファイルの拡張子を保持します。ファイルの拡張子を除外するとよいでしょう。ありがとう – Ramon

0

あなたはPerlのインプレース編集機能を使用することができます。

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

これは何も変わっていません!しかし、提案ありがとう! – Ramon

関連する問題