約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
%
にモジュロ(残り)演算子を使用してくださいNR
。NR % 100
1,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