Ich habe diese Dateien in einem Verzeichnis.
Mabel-A10_GTAGAGGA_L001_R1_001.fastq.gz
Mabel-A5_GGACTCCT_L001_R1_001.fastq.gz
Mabel-A11_GCTCATGA_L001_R1_001.fastq.gz
Mabel-A6_TAGGCATG_L001_R1_001.fastq.gz
Ich möchte, dass die Ausgabe so aussieht.
Mabel-A10_L001_R1_001.fastq.gz
Mabel-A5_L001_R1_001.fastq.gz
Mabel-A11_L001_R1_001.fastq.gz
Mabel-A6_L001_R1_001.fastq.gz
Antwort1
Sie können beispielsweise versuchen, sie umzubenennen:
for i in *
do
o=$(echo $i|awk -F_ '{print $1,$3,$4,$5}')
mv "$i" "$o"
done
Antwort2
Dieses Skript gibt Shell-Befehle aus, die eine Reihe von „mv“-Befehlen ausführen, um Ihre Aufgabe zu erledigen:
for FILE in *.fastq.gz
do
L="${FILE%%_*}_"
R="${FILE#${L}*_}";
printf 'mv -vi "%s" "%s"\n' "$FILE" "$L$R"
done
Führen Sie das einmal aus und prüfen Sie die Ausgabe. Wenn viele Dateien vorhanden sind, können Sie less
die Befehle überprüfen.
Wenn alles gut aussieht, führen Sie den Befehl erneut aus und leiten Sie die Ausgabe an weiter bash
.
Dies funktioniert, indem die Variable L auf alles links vom ersten Unterstrich im Dateinamen plus den Unterstrich selbst gesetzt wird. Anschließend wird die Zeichenfolge R gebildet, indem die Zeichenfolge in L vom Anfang des Dateinamens entfernt wird und weiter bis zum nächsten Unterstrich entfernt wird.
mv -vi "Mabel-A10_GTAGAGGA_L001_R1_001.fastq.gz" "Mabel-A10_L001_R1_001.fastq.gz"
mv -vi "Mabel-A11_GCTCATGA_L001_R1_001.fastq.gz" "Mabel-A11_L001_R1_001.fastq.gz"
mv -vi "Mabel-A5_GGACTCCT_L001_R1_001.fastq.gz" "Mabel-A5_L001_R1_001.fastq.gz"
mv -vi "Mabel-A6_TAGGCATG_L001_R1_001.fastq.gz" "Mabel-A6_L001_R1_001.fastq.gz"