Massenumbenennung (Anhängen) von CSV-Dateien basierend auf einem Wert innerhalb

Massenumbenennung (Anhängen) von CSV-Dateien basierend auf einem Wert innerhalb

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 {} +

verwandte Informationen