큰 파일의 모든 N번째 줄을 새 파일로 인쇄

큰 파일의 모든 N번째 줄을 새 파일로 인쇄

300,000개 이상의 레코드가 포함된 파일의 모든 N번째 줄을 새 파일로 인쇄하려고 합니다. 파일 끝에 도달할 때까지 매 N번째 레코드마다 이 작업을 수행해야 합니다.

답변1

awk 'NR % 5 == 0' input > output

5줄마다 인쇄합니다.

환경 변수를 사용하려면 다음 안내를 따르세요.

NUM=5
awk -v NUM=$NUM 'NR % NUM == 0' input > output

답변2

각각 인쇄질소  세 번째 줄, 사용

sed -n'0~질소피'
예를 들어 oldfileto 의 5개 행마다 복사하려면 newfile다음을 수행합니다.

sed -n '0~5p' oldfile > newfile

sed이는 다음을 사용합니다.첫 번째~단계주소 형식은 "모든 항목과 일치함"을 의미합니다.단계'행으로 시작하는 행첫 번째". 이론적으로는 파일 끝까지 0, 5, 10, 15, 20, 25, ... 줄을 인쇄합니다. 물론 0 줄은 없으므로 5, 10, 20 줄만 인쇄합니다. , 25, ...;  0~5단지 편리한 표현입니다 5~5 (5번째 줄부터 시작하여 5줄씩 인쇄합니다. 즉, 5, 10, 15, 20, 25...).

sed이 기능의 또 다른 예(답변이 없는 질문)는 다음 과 같습니다 .

sed -n '2~5p' oldfile

파일 끝까지 라인 2, 7, 12, 17, 22, 27, …을 인쇄합니다.

참고: 이 방법에는 GNU sed가 필요합니다.첫 번째~단계주소 형식은 이식할 수 없는 확장입니다. (GNU sed의 일부 이전 버전에는 이 5~5형식 대신 이 형식이  필요할 수 있습니다 0~5 .)

답변3

이것은 펄 버전입니다:

perl -ne 'print if $. % 5 == 0;' infile > outfile

답변4

sed와 비슷하게 awk도 있습니다:

$ seq 1000000000 |awk 'NR==500000{print;exit}'
500000

NR = 인쇄하려는 줄 수(파일이 완료될 때까지 기다리지 않으려면 종료합니다). 당신의 경우에는

awk 'NR==Nth{print;exit}' inputfile >outputfile

여기서 Nth는 인쇄해야 하는 N번째 줄 번호입니다.

관련 정보