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