UNIXでは、最初の列の最後の数字に基づいてファイルを分割する

UNIXでは、最初の列の最後の数字に基づいてファイルを分割する

ファイルがありますsales_$date.csv。最初の列(ITEM)の最後の数字に基づいて10個のファイルに分割したいと思います。だから実際にファイルはsales_$date-01.csv、、、sales_$date-02.csv..など10個のファイルに分かれるようになります。また、すべてのファイルのヘッダーを保存する必要があります。列の長さ(ITEM)値は固定されていません。このプロセスは毎日45分ごとに実行する必要があります。以下は例です

sales_$date.csvファイル: FILE=sales_$日付項目、数量、店舗、BUYABLEFLAG 4000,1,13805,Y 4001,3,1456,N 5010,2,14534,Y 7200,5,14566,N 4002,6,46 ,9,34234,Y 7832,32,6575,N

sales_$date-01.csvゼロで終わる項目レコードが必要です(最初の列のITEM値を参照)。

ITEM,QTY,STORE,BUYABLEFLAG
4000,1,13805,Y
5010,2,14534,Y
7200,5,14566,N

sales_$date-02.csv1で終わる項目レコードが必要です(最初の列のITEM値を参照)。

ITEM,QTY,STORE,BUYABLEFLAG
4001,3,1456,N
5611,9,34234,Y

sales_$date-03.csv2で終わる項目のレコードが必要です(最初の列のITEM値を参照)。

ITEM,QTY,STORE,BUYABLEFLAG
4002,2,6534534,N
7832,32,6575,N

さらに、すべてのファイル名(例:sales_date-01、sales_date-02、sales_date-03)はFILE_NAMEという変数にあります。

ベストアンサー1

ファイルが大きいが大きくない場合は、次のコマンドを使用してファイルを10回繰り返すことができます。

for digit in 0 1 2 3 4 5 6 7 8 9 ; do
    egrep "^ITEM,|^...$digit" sales.csv >sales-0$digit.csv
done

おすすめ記事