[GELÖST] AWK Suche -> Ausgabe -> Variablen -> mv original.ext -> original-variable.ext

Vom einfachen Programm zum fertigen Debian-Paket, Fragen rund um Programmiersprachen, Scripting und Lizenzierung.
Antworten
sonya
Beiträge: 84
Registriert: 28.07.2007 07:55:33

[GELÖST] AWK Suche -> Ausgabe -> Variablen -> mv original.ext -> original-variable.ext

Beitrag von sonya » 14.07.2023 14:32:39

Hallo,
eine große Anzahl von Textdateien innerhalb eines Verzeichnisses.
In jeder Datei gibt es in irgend einer Zeile *einmalig* eine »Zeichenfolge« am Beginn einer Zeile dahinter per »-« getrennt weitere Zeichenfolgen
Auch innerhalb aller durch AWK aufgeführten Dateien jeweils einmalige Zeichenfolgen, hier zur besseren Anschauung z.B das Datum komplett mit millisek in Form von z.B.:
14_07_2023-07_19_40_587_5875

Im Terminal ausgeführt:

Code: Alles auswählen

awk '/Suchbegriff_Zeichenfolge/{print}' *
Im Beispiel hier:

Code: Alles auswählen

awk '/ABC/{print}' *
liefert AWK schön untereinander für jede Datei einmalig

Code: Alles auswählen

ABC-14_07_2023-07_10_35_555_5555
ABC-21_08_2022-10_01_20_222_7777
ABC-01_01_2022-13_02_40_333_2222
ABC-03_09_2021-11_40_40_111_5871
Um es verständlicher zu machen. Aufgelistet mit den jeweiligen Dateien:

Code: Alles auswählen

01-vbnmde.txt 	ABC-14_07_2023-07_10_35_555_5555
xyz.txt 	ABC-21_08_2022-10_01_20_222_7777
qwertz.txt 	ABC-01_01_2022-13_02_40_333_2222
asdf-010.txt 	ABC-03_09_2021-11_40_40_111_5871
Das Format „Datum-Zeit“ ist hier nur zwecks Anschauung beispielhaft gewählt.

Nun würde ich gerne die jeweiligen Dateien entsprechend:

Code: Alles auswählen

originaler_Dateiname-ABC… ….txt umbenennen
Jede der durch AWK gelisteten Zeilen, müssten also jeweils in eine Variable gespeichert werden.
Diese Variable(n) wiederum an mv geleitet. Dann ein:

Code: Alles auswählen

mv originaldatei.txt originaldatei-VariableXY.txt 
Das Ergebnis von mv und der gesamten Aktion:

Code: Alles auswählen

01-vbnmde-ABC-14_07_2023-07_10_35_555_5555.txt
xyz-ABC-21_08_2022-10_01_20_222_7777.txt
qwertz-ABC-01_01_2022-13_02_40_333_2222.txt
asdf-010-ABC-03_09_2021-11_40_40_111_5871.txt
Ich bekomme das einfach nicht hin.
Gibt es dazu eine Lösung/einen Weg.


Edit JTH: Nach „Softwareentwicklung und -paketierung, Scripting“ verschoben.
Zuletzt geändert von sonya am 22.07.2023 17:07:47, insgesamt 2-mal geändert.

tobo
Beiträge: 2336
Registriert: 10.12.2008 10:51:41

Re: AWK Suche -> Ausgabe -> Variablen -> mv original.ext -> original-variable.ext

Beitrag von tobo » 14.07.2023 20:21:39

Eine Lösung ohne AWK wäre:

Code: Alles auswählen

SEARCH=ABC-; for file in *.txt; do mv "$file" "${file%.txt}-`grep -om1 "^${SEARCH}.*" "$file"`.txt"; done

JTH
Moderator
Beiträge: 3077
Registriert: 13.08.2008 17:01:41
Wohnort: Berlin

Re: AWK Suche -> Ausgabe -> Variablen -> mv original.ext -> original-variable.ext

Beitrag von JTH » 14.07.2023 21:18:10

Man könnt das Umbenennen auch zur Abwechslung mal aus awk heraus ausführen:

Code: Alles auswählen

awk -- '/ABC-/ {
	move_it = sprintf("mv -- \"%s\" \"%s.txt\"", FILENAME, $0);
	system(move_it);
	nextfile;
}' *.txt
Ist direkt in dem Ordner mit den Dateien zu auszuführen. Wenn auch Dateien in Unterordnern liegen, müsste man sich noch fürs Umbenennen den Ordner aus FILENAME raustrennen. Gleichfalls, falls es nicht nur eine einheitliche Dateiendung gibt.
Manchmal bekannt als Just (another) Terminal Hacker.

sonya
Beiträge: 84
Registriert: 28.07.2007 07:55:33

Re: AWK Suche -> Ausgabe -> Variablen -> mv original.ext -> original-variable.ext

Beitrag von sonya » 22.07.2023 17:05:42

Hallo @tobo, hallo @JTH,

vielen Dank für Eure Hilfe.
Das Ganze funktioniert jetzt :D

Ein schönes Wochenende Euch

Antworten