フォルダー内の CSV ファイルのバッチの名前を、それぞれの値に基づいて変更する方法はありますか? 2 行目の最初の値を取得して、左側の末尾に追加したいと思います。例:
ファイル名: 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
以下は 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 {} +