![50줄마다 15번째와 25번째 줄을 인쇄하려면 어떻게 해야 합니까?](https://linux55.com/image/99503/50%EC%A4%84%EB%A7%88%EB%8B%A4%2015%EB%B2%88%EC%A7%B8%EC%99%80%2025%EB%B2%88%EC%A7%B8%20%EC%A4%84%EC%9D%84%20%EC%9D%B8%EC%87%84%ED%95%98%EB%A0%A4%EB%A9%B4%20%EC%96%B4%EB%96%BB%EA%B2%8C%20%ED%95%B4%EC%95%BC%20%ED%95%A9%EB%8B%88%EA%B9%8C%3F.png)
대용량 파일이 있고 연속 50줄마다 인쇄하고 싶습니다.15일그리고25일철사.
sed -n '15,25p' inputfile
15행과 25행만 인쇄하고 파일의 50행마다 반복하도록 이 명령을 수정하려면 어떻게 해야 합니까?
답변1
awk 'NR % 50 == 15 || NR % 50 == 25'
분명히 휴대 가능합니다.
GNU sed
대안을 참고하세요:
sed '15~50b;25~50b;d'
any를 사용하면 sed
언제든지 다음을 수행할 수 있습니다.
sed -n 'n;n;n;n;n;n;n;n;n;n;n;n;n;n;p;n;n;n;n;n;n;n;n;n;n;p;n;n;n;n;n;n;n;n;n;n;n;n;n;n;n;n;n;n;n;n;n;n;n;n;n'
(다음 줄을 14번 가져오고, 다음 줄을 10번 인쇄하고, 다음 줄을 25번 인쇄하고, 다음 루프로 돌아갑니다(누락된 추가 줄을 잡아 50번 생성)).
답변2
이건 직업이야awk
awk '(NR%50==15) || (NR%50==25)' inputfile
편집: OP의 sed 지시문에 오해를 받았습니다.
답변3
그리고perl
1) 솔루션과 유사하게 awk
변수 $.
는 줄 번호를 저장합니다.
$ seq 135 | perl -ne 'print if $.%50==15 || $.%50==25'
15
25
65
75
115
125
2) 라인 번호 목록을 비교하여 확장을 쉽게 합니다.
$ seq 135 | perl -ne 'print if grep {$_==$.%50} (15,25)'
15
25
65
75
115
125
$ seq 135 | perl -ne 'print if grep {$_==$.%50} (15,25,32)'
15
25
32
65
75
82
115
125
132
답변4
awk를 사용하는 또 다른 방법은 다음을 기반으로 합니다.샌딥의 생각목록을 사용하는 방법:
awk 'BEGIN { a[15] a[25] }; NR % 50 in a'
a
인쇄할 행을 기반으로 배열의 키를 설정합니다. NR % 50
배열의 키 중 하나와 일치하는 행을 인쇄합니다 .
user
몇 가지 성능 지표를 제공하기 위해 이 접근 방식의 시간을 측정하고 3가지 실행 시간의 평균을 구하여 다른 답변과 비교했습니다 .
0.276초
$ time awk 'BEGIN { a[15] a[25] }; NR % 50 in a' <(seq 1000000) > /dev/null
0.374초
$ time awk 'NR % 50 == 15 || NR % 50 == 25' <(seq 1000000) > /dev/null
0.384초
$ time perl -ne 'print if $.%50==15 || $.%50==25' <(seq 1000000) > /dev/null
0.542초
$ time perl -ne 'print if grep {$_==$.%50} (15,25)' <(seq 1000000) > /dev/null