2016-03-31 28 views
2

Birçok fasta dosyam var ve dosyaların sonuna satırların sonuna eklemek istiyorum (başlık satırı). Bunu 1 by 1 by sed tarafından nasıl yapacağımı biliyorum ama birçok dosya için daha iyi bir çözüm arıyorum.Dosya adlarını satırların sonuna ekle

File1.txt 
>1 
ACGTA 

File2.txt 
>2 
GTCA 

beklenen Ne:

File1.txt 
>1_File1 
ACGTA 

File2.txt 
>2_File2 
GTCA 

Bu OSX sed kullanarak tek bir dosya için çalışır:

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

Teşekkür

cevap

0

Sen döngü için bu basit kullanabilirsiniz:

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

"${f%.*}" dosya gelen uzantısı şerit olacak.

+1

Teşekkürler! Bütün gün terminalde ... – Ramon

+0

daha da kısa olabilir: sed -i 's /^>.*/&_'${_.*}'/' * .txt – SaintHax

1
Sen ifadesi göre değişiklik gerekebilir

senin dosya isimleri, ancak temel olarak tüm dosyaları

boyunca yinelemek istiyorsunuz
#!/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

Bunu elde ederim:> 1 _ "$ file". Yanlış mı yapıyorum? – Ramon

+0

_ "$ file" öğesini _ '$ file' olarak değiştirdikten sonra bir iş yaptı, ancak dosyanın uzantısını hat üzerinde tuttu. Dosya uzantısını hariç tutmak güzel olurdu. Teşekkürler – Ramon

0

Sen Perl INPLACE düzenleme yetenekleri kullanabilirsiniz:

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

Bu hiçbir şey değişmedi! Öneri için teşekkürler! – Ramon