次の値に基づいてCSVファイルのバッチ名を変更する(追加)

次の値に基づいてCSVファイルのバッチ名を変更する(追加)

各ファイルの値に基づいてフォルダ内の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

多数の電子レポート(さまざまなサイズの約80,000ファイル)をソートしようとしているために必要でないレポートをフィルタリングするには、このフィールドをインポートする必要があります。 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 {} +

おすすめ記事