Renomear em massa (anexar) arquivos CSV com base em um valor dentro

Renomear em massa (anexar) arquivos CSV com base em um valor dentro

Existe uma maneira de renomear um lote de arquivos CSV em uma pasta com base em um valor dentro de cada um? Quero pegar o primeiro valor da segunda linha e anexá-lo ao final do lado esquerdo. Por exemplo:

Nome do arquivo: 20160101-2015-12-01-20-45-1034581.csv

Conteúdo:

HDR,FEC,8.1,FEC Webforms,8.1.0.0,
F1N,C00593228,,JOSH LAROSE SENATORIAL VICTORY SUPER PAC

O novo nome do arquivo teria um travessão e "F1N" adicionado ao final:

Novo nome de arquivo: 20160101-2015-12-01-20-45-1034581-F1N.csv

Estou tentando classificar vários relatórios eletrônicos (cerca de 80 mil arquivos de vários tamanhos), mas preciso pegar esse campo para filtrar aqueles que não preciso. Trabalhando em um Mac.

Obrigado!

Responder1

Aqui está um script que faz isso para um arquivo.

#!/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

Teste 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

Você pode modificá-lo para ser um loop ou escrever um loop em torno dele. Pessoalmente, eu executaria isso deencontrar(1) como

$ find ~/my/csv/files/ -exec ./rename {} +

informação relacionada