Есть ли способ переименовать пакет 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 {} +