이것이 어떻게 달성될 수 있습니까?
매뉴얼에 적용 가능한 옵션이 표시되지 않습니다.
1,000만 줄 이후에 들여쓰기가 깨지는지 적극적으로 확인해 봤습니다.
다음과 같이 확인할 수 있습니다.
$ (for i in `seq 0 10000000`; do echo "$i"; done) | nl
이렇게 많은 행을 자주 생성하지는 않지만 예전처럼 손상되는 것을 원하지 않습니다. 이것이 어떻게 달성될 수 있습니까?
답변1
nl
필요한 최대량을 측정하기 위해 전체 입력을 버퍼링해야 한다고 제안하는 경우 이는 스트리밍 필터의 정신에 전혀 맞지 않습니다. 드문 예외( sort
예:)를 제외하고 핵심 유틸리티는 스트림을 즉시 처리하려고 시도합니다. 특히 스트림이 거의 무한한 파이프라인에서 사용될 수 있는 경우(예: nl
점진적으로 필터링되어 파일로 리디렉션되는 로그 스트림은 상당히 많은 데이터를 축적할 수 있음) 데이터의 양).
패딩을 처리하는 표준 방법은 예상되는 최대 너비를 매개변수로 지정하는 것입니다. 이 경우 패딩을 끄거나(어쨌든 저는 이것을 선호합니다. 앞에 공백으로 구분된 열을 두는 것이 합리적입니다) 다른 너비를 설정할 수 있습니다. 비교하다:
seq 0 10000000 | nl -w12 # default right-justify, 12 character width
seq 0 10000000 | nl -w1 # default right-justify, 1 character width (no padding)
seq 0 10000000 | nl -w1 -s' ' # right-justify, space delimited instead of tab
seq 0 10000000 | nl -nln # left-justify
만약 너라면진짜이 작업을 자동으로 수행하려면 wc -l
먼저 길이를 측정한 다음 -w
적절한 설정을 지정하면 됩니다.
답변2
seq 0 10000000
천만 1개의 행으로 확장 되며 bash
값을 반복할 수 있도록 메모리에 저장해야 합니다.저것문제는 시스템의 메모리 + 스왑을 모두 사용하기 전에 이를 종료할 수 있었다는 것입니다(최신 커널은 종료할 프로세스를 올바르게 결정하지만 메모리가 부족하여 다른 프로세스를 종료하고 싶지 않았습니다).
nl
입력을 읽는 또는 또는 다른 명령 nl
으로 바꿔서 확인할 수 있습니다 .cat
wc
bash
muru의 버전은 모든 데이터를 중간에 저장할 필요 없이 동일해야 합니다 .
편집: 숫자 패딩에 관한 것이라면 맨페이지 10초를 읽으면 nl -w
... Use 옵션이 나올 것으로 예상됩니다 nl -w8
. 줄 번호와 줄 내용 사이의 큰 간격(기본 탭 사용으로 인해)이 마음에 들지 않으면 -s' '
맨페이지에 추가하여 쉽게 찾을 수 있습니다. 질문에 for 루프가 있는 이유가 여전히 궁금합니다.