Bulk renomear (anexar) arquivos CSV com base em um valor dentro

0

Existe uma maneira de renomear um lote de arquivos CSV em uma pasta com base em um valor dentro de cada um? Eu quero pegar o primeiro valor na 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 de arquivo terá um traço e "F1N" será adicionado ao final:

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

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

Obrigado!

    
por ChrisDC 23.11.2017 / 01:08

1 resposta

0

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 ao redor dele. Pessoalmente, eu o executaria de find (1) como

$ find ~/my/csv/files/ -exec ./rename {} +
    
por 23.11.2017 / 02:45