¿Hay alguna manera de cambiar el nombre de un lote de archivos CSV en una carpeta según un valor dentro de cada uno? Quiero tomar el primer valor de la segunda fila y agregarlo al final del lado izquierdo. Por ejemplo:
Nombre de archivo: 20160101-2015-12-01-20-45-1034581.csv
Contenido:
HDR,FEC,8.1,FEC Webforms,8.1.0.0,
F1N,C00593228,,JOSH LAROSE SENATORIAL VICTORY SUPER PAC
El nuevo nombre de archivo tendría un guión y se agregaría "F1N" al final:
Nuevo nombre de archivo: 20160101-2015-12-01-20-45-1034581-F1N.csv
Estoy intentando clasificar un montón de informes electrónicos (alrededor de 80.000 archivos de varios tamaños), pero necesito tomar ese campo para filtrar los que no necesito. Trabajando en una Mac.
¡Gracias!
Respuesta1
Aquí hay un script que lo hace para un archivo.
#!/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
Probando 123:
$ ./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
Puede modificarlo para que sea un bucle o escribir un bucle alrededor de él. Personalmente lo ejecutaría desdeencontrar(1) como
$ find ~/my/csv/files/ -exec ./rename {} +