각 줄을 여러 번 인쇄하지만 다른 시간에 인쇄합니다.

각 줄을 여러 번 인쇄하지만 다른 시간에 인쇄합니다.

다음과 같이 약 4000000줄이 포함된 거대한 파일이 있습니다.

문서:

1 
1 
2 
3 
2 
4 
...

기본적으로 각 행에는 숫자가 포함됩니다. 이 예를 고려하여 다음과 같은 파일을 생성하고 싶습니다.

새로운 파일:

1 
1 
2 
2 
3 
3 
3 
2 
2 
4 
4 
4 
4 
....

각 행이 n번 반복되기를 원합니다. 여기서 n은 원래 행에 저장된 숫자입니다.

말씀드린 대로 파일 용량이 꽤 커서 가장 빠른 방법을 찾고 있습니다. 현재 제가 구현한 코드의 병목 현상은 쓰기 위해 새 파일을 다시 열어야 한다는 것입니다.

지금 이렇게 하고 있는데 속도가 너무 느려요

while read i; do seq 1 ${i} | xargs -i -- echo $i >> newFile ;done < file

매우 감사합니다.

답변1

존재하다 awk:

awk '{ for (i = 1; i <= $1; i++) { print $0 } }' file > newFile

그러면 아무것도 다시 열지 않고 입력 파일을 한 번 읽고 출력 파일을 한 번 씁니다.

답변2

에서는 문자열 반복 연산자를 perl사용합니다 .x

$ perl -ne 'print $_ x $_' file
1
1
2
2
3
3
3
2
2
4
4
4
4

관련 정보