다음과 같이 약 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