有没有办法根据每个文件中的值重命名文件夹中的一批 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
我正在尝试对大量电子报告(大约 80k 个不同大小的文件)进行排序,但我需要抓取该字段来过滤掉我不需要的报告。在 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 {} +