약 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