각 50 줄 중 15 번과 25 번 줄을 인쇄하는 방법은 무엇입니까?


9

나는 큰 파일을 가지고 있으며 각 순차적 인 50 줄, 15 번째 줄 과 25 번째 줄 에서 인쇄하고 싶습니다 .

sed -n '15,25p' inputfile

15 행과 25 행만 인쇄하고 파일의 각 50 행을 반복하도록이 명령을 수정하는 방법.

답변:


22
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 행을 만들기 위해 누락 된 추가 줄을 가져옵니다)).


10

이것은 직업입니다 awk

awk '(NR%50==15) || (NR%50==25)' inputfile

편집 : OP의 sed 명령으로 오도되었습니다.


9

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

목록을 사용 하려는 Sundeep의 아이디어 를 기반으로 awk를 사용하는 또 다른 방법 은 다음과 같습니다.

awk 'BEGIN { a[15] a[25] }; NR % 50 in a'

a인쇄하려는 줄을 기준으로 배열에서 키를 설정하십시오 . NR % 50배열의 키 중 하나와 일치하는 행을 인쇄 하십시오.


성능에 대한 정보를 제공하기 위해이 접근법의 시간을 정하고 다른 답변과 비교하여 평균 user3 번의 실행 시간을 보냈습니다.

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
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.