Cambiar el nombre de forma masiva (añadir) archivos CSV según un valor dentro

Cambiar el nombre de forma masiva (añadir) archivos CSV según un valor dentro

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

información relacionada