2016-05-31 9 views
1

Ich möchte die Ergebnisse eines mehrere Grep in einem TXT-Format speichern. Ich macheBash - Ändern Sie den Dateinamen durch Ändern der Dateinamenvariable

for i in GO_*.txt; do 
    grep -o "GO:\w*" ${i} | grep -f - ../PFAM2GO.txt > ${i}_PFAM+GO.txt 
done 

Die Sache ist, dass offensichtlich die endgültigen Dateinamen zu der ursprünglichen Dateierweiterung umfaßt, wobei GO_*.txt_PFAM+GO.txt. Jetzt möchte ich nur GO_*_PFAM+GO.txt haben. Gibt es eine Möglichkeit, die ${i} zu ändern, um die .txt abzubrechen, ohne eine rename oder eine mv danach durchführen zu müssen?

Hinweis: der * Teil hat variable Länge.

Antwort

2

Sie können parameter expansion verwenden, um die Erweiterung aus dem Dateinamen zu entfernen:

for i in GO_*.txt; do 
    name="${i%.txt}" 
    grep -o "GO:\w*" "${i}" | grep -f - ../PFAM2GO.txt > "${name}_PFAM+GO.txt" 
done 
+0

Danke, das den Trick! Der Link, den du geteilt hast, war auch sehr nützlich. – LinuxBlanket

+0

Gern geschehen – hek2mgl

Verwandte Themen