Solaris は、各新しい行の先頭にシーケンスジェネレータを使用します。

Solaris は、各新しい行の先頭にシーケンスジェネレータを使用します。

データベースからデータを抽出して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桁以上の数字を切り捨てます。これはnlSolarisユーティリティの実装のバグかもしれません。また、特殊行の内容(-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

おすすめ記事