重複した行番号を追加

重複した行番号を追加

約10,000行のファイルがあります。最初の列に行番号を追加したいのですが、行番号1〜100を繰り返す方法です。例えば、

1 12313
2 3434
.
.
.
100 4233
1 24523
.
.
.
100 4543543
1
.
.
.     
100

grep または awk を使ってこれを行うにはどうすればよいですか?行番号を印刷しましたが、awkを繰り返し使用しませんでした。

awk '{ print NR, $1 }' p2.dat > p3.dat

答え1

%にモジュロ(残り)演算子を使用してくださいNRNR % 1001,2,3...99,0,1,2... を提供するので、少し調整が必要です。これを行う必要があります:

awk '{ print (NR-1) % 100 + 1, $1 }' p2.dat > p3.dat

もちろん、これは質問に対する答えです。元の質問、修正されていません。

答え2

これは最小限の屋根ふきで動作するようです。

awk '{ printf("%0.0f ",(NR/100.001)+.5) ;print $1 }' p2.dat > p3.dat

デモ、まず印刷10数字、グループサムプレフィックスの増加:

seq 10 | awk '{ printf("%0.0f ",(NR/3.001)+.5) ;print $1 }'

出力:

1 1
1 2
1 3
2 4
2 5
2 6
3 7
3 8
3 9
4 10

注:awk丸めは、一部のバイナリ変換の欠陥を示しています。上記のコードでは、などの表現を使用しますが(NR/3.001)+.5)、これ(NR/3)+.5)(NR*(1/3))+.5)。残念ながら、これらは機能しません:

# WRONG: (rounding errors), shows four '2's, etc.
seq 10  | awk '{ printf("%0.0f ",(NR/3)+.5) ;print $1 }' 
1 1
1 2
2 3
2 4
2 5
2 6
3 7
3 8
4 9
4 10

関連情報