2016-04-08 8 views
0

ich mehrere .vcf.gz Dateien haben:Bash Schleife Datei gunzip und Dateierweiterung und Datei entfernen Präfixe

subset_file1.vcf.vcf.gz 
subset_file2.vcf.vcf.gz 
subset_file3.vcf.vcf.gz 

ich diese Datei gunzip wollen und benennen Sie sie (entfernen subset_ und redudant .vcf Erweiterung in einem Rutsch und nutzen Sie diese Dateien:

file1.vcf 
file2.vcf 
file3.vcf 

Dies ist das Skript, das ich versucht habe:

iFILES=/file/path/*.gz 
for i in $iFILES; 
do gunzip -k $i > /get/in/this/dir/"${i##*/}" 
done 

Antwort

2

Da Sie an Ihrem Ausgangspfadnamen zu drei Betriebs haben

1.remove das Verzeichnis Teil

2.Remove Präfix subset_

3.Remove redudant Erweiterung .vcf

Es ist schwer zu erreichen ist mit nur ein Befehl.

Folgendes ist eine Modifikationsversion. Seien Sie VORSICHT, um es zu versuchen. Ich habe es nicht gründlich in meinem Computer getestet.

for i in /file/path/*.gz; 
do 
    # get the output file name 
    o=$(echo ${i##*/} | sed 's/.*_\(.*\)\(\.[a-z]\{3\}\)\{2\}.*/\1\2/g')  
    gunzip -k $i > /get/in/this/dir/$o 
done 
+1

Ich schlage vor, den sed Befehl ändert die Zeichenfolge "Teilmenge" explizit zu verwenden ('s/Teilmenge _ \ (. * \) \ (\. [Az] \ {3 \} \) \ {2 \} . */\ 1 \ 2/g'), um gierige '. *' Für Dateinamen mit Unterstrichen zu vermeiden. – eff

+0

Ja, guter Vorschlag. Oder wechseln Sie zu 'sed 's/[^ _] \ + _ \ (. * \) \ (\. [Az] \ {3 \} \) \ {2 \}. */\ 1 \ 2/g' 'verschiebe das erste Präfix – alijandro

Verwandte Themen