Массовое переименование (добавление) CSV-файлов на основе значения внутри

Массовое переименование (добавление) CSV-файлов на основе значения внутри

Есть ли способ переименовать пакет CSV-файлов в папке на основе значения в каждом? Я хочу взять первое значение во второй строке и добавить его в конец левой стороны. Например:

Имя файла: 20160101-2015-12-01-20-45-1034581.csv

Содержание:

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

Новое имя файла будет иметь дефис и «F1N» в конце:

Новое имя файла: 20160101-2015-12-01-20-45-1034581-F1N.csv

Я пытаюсь отсортировать кучу электронных отчетов (около 80 тыс. файлов разного размера), но мне нужно захватить это поле, чтобы отфильтровать те, которые мне не нужны. Работаю на Mac.

Спасибо!

решение1

Вот скрипт, который делает это для одного файла.

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

Тестирование 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

Вы можете изменить его так, чтобы он стал циклом, или написать цикл вокруг него. Лично я бы выполнил его изнаходить(1) как

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

Связанный контент