Gibt es eine Möglichkeit, einen Stapel CSV-Dateien in einem Ordner basierend auf einem Wert in jeder Datei umzubenennen? Ich möchte den ersten Wert in der zweiten Zeile nehmen und ihn an das Ende der linken Seite anhängen. Beispiel:
Dateiname: 20160101-2015-12-01-20-45-1034581.csv
Inhalt:
HDR,FEC,8.1,FEC Webforms,8.1.0.0,
F1N,C00593228,,JOSH LAROSE SENATORIAL VICTORY SUPER PAC
Der neue Dateiname würde einen Bindestrich und am Ende „F1N“ enthalten:
Neuer Dateiname: 20160101-2015-12-01-20-45-1034581-F1N.csv
Ich versuche, eine Menge elektronischer Berichte (ca. 80.000 Dateien unterschiedlicher Größe) zu sortieren, aber ich muss dieses Feld verwenden, um die Berichte herauszufiltern, die ich nicht benötige. Ich arbeite auf einem Mac.
Danke!
Antwort1
Hier ist ein Skript, das dies für eine Datei erledigt.
#!/bin/sh
set -e
oldname=$1
# create file
printf '%s\n%s\n' \
'HDR,FEC,8.1,FEC Webforms,8.1.0.0,' \
'F1N,C00593228,,JOSH LAROSE SENATORIAL VICTORY SUPER PAC' \
> "$oldname"
# get that "first" value:
value=$(awk -F, 'NR == 2 {print $1; exit 0}' $oldname)
# insert it into the old name
newname=$(echo $oldname | sed 's/\.csv$/'"-$value&/")
# rename the file
mv $oldname $newname
# show your work ;-)
ls -l $newname
head $newname
Prüfung 1 2 3:
$ ./rename foo.csv
-rw-r--r-- 1 jklowden staff 90 Nov 22 20:33 foo-F1N.csv
HDR,FEC,8.1,FEC Webforms,8.1.0.0,
F1N,C00593228,,JOSH LAROSE SENATORIAL VICTORY SUPER PAC
Sie können es in eine Schleife umwandeln oder eine Schleife darum schreiben. Ich persönlich würde es ausführen vonfinden(1) als
$ find ~/my/csv/files/ -exec ./rename {} +