データベースからデータを抽出してcsvファイルにロードするスクリプトを作成しました。SunOS hstz1454 5.10
システムを使用しています。各行の先頭にカンマを付ける順序を作成しようとしています。
データは次のとおりです。
1,1,1535,0,1,Y,Y
1,1,1535,10,2,Y,Y
1,1,1535,20,1,Y,Y
1,1,1535,30,2,Y,Y
1,1,1535,40,1,Y,Y
私のcsvファイルでは、各行の先頭にカンマが続くシーケンス番号を生成したいと思います。
1,1,1,1535,0,1,Y,Y
2,1,1,1535,10,2,Y,Y
3,1,1,1535,20,1,Y,Y
4,1,1,1535,30,2,Y,Y
5,1,1,1535,40,1,Y,Y
これは増分なしでのみ印刷するコードです1
。新しい行ごとに増分するにはどうすればよいですか?
for fname in conv2016_02_cos_speed2percent_data_migration.csv
do
echo "adds a seq number on each line for $fname"
sed 's/.*/1,&/' $fname > tmp.tmp
mv tmp.tmp $fname
done
ベストアンサー1
使用nl
:
nl -s, -w1 file
これにより、各行の先頭に数字が増えます。-s,
番号と行の残りの部分をコンマで区切るように指定します。-w1
行番号に使用される文字数を指定します。
編集する:のようにスティーブン・チャジェラスで指摘したコメント、-w1
フラグは1桁以上の数字を切り捨てます。これはnl
Solarisユーティリティの実装のバグかもしれません。また、特殊行の内容(-d $'\n\n'
)と空白行(-ba)に番号を付ける必要があります。
NL='
'
nl -s, -ba -d "$NL$NL" file
出力(含むGNU coreutils 8.12.197
):
$ nl -s, -ba -d "$NL$NL" file
1,4,2,64,1088,80,1,Y,Y
2,5,2,64,1088,95,2,Y,Y
3,8,2,1088,39813120,10,12,Y,Y
4,6,2,1088,39813120,0,2,Y,Y
5,7,2,1088,39813120,5,1,Y,Y
6,8,2,1088,39813120,10,2,Y,Y
スクリプトでは次のようになります。
NL='
'
for fname in conv2016_02_cos_speed2percent_data_migration.csv; do
nl -s, -ba -d "$NL$NL" "$fname" > tmp.tmp && mv tmp.tmp "$fname"
done