일치/빈 줄 이후 n번째 줄을 인쇄하는 방법

일치/빈 줄 이후 n번째 줄을 인쇄하는 방법

빈 줄을 찾은 다음 빈 줄 다음에 n번째 줄을 인쇄하는 짧은 스크립트를 작성하려고 합니다.

~을 위한

foo1
foo2
foo3

bar1
bar2
bar3

spam1
spam2
spam3

eggs1
eggs2
eggs3

빈 줄 다음에 매 두 번째 줄을 인쇄하면 다음과 같은 결과가 발생합니다.

foo2
bar2
spam2
eggs2

sed를 사용해 보았지만 sed -n -e "/^$/ {N; N; x; N; p; x; d}"예약된 공간을 지울 수 없었고 결과는 내가 원하는 것과 달랐습니다.

답변1

awk '++n == 2; !NF {n = 0}' < your-file

또는:

sed -n '
  n;p
  :1
  /./{
    n;b1
  }' < your-file

답변2

0번 줄은 빈 줄로 간주하기 때문에 조금 어렵습니다. 이를 무시하고 "빈 줄 다음에 한 줄씩 인쇄"라는 문자 그대로의 의미를 취하면 다음과 같이 할 수 있습니다 ex.

ex -sc 'g/^$/+2p' -cq filename
  • -s: 자동 모드( ex실제로 대화형 편집).
  • -c: 실행할 명령을 선언합니다.
  • g/^$/:다음 명령을 실행하세요G전 세계적으로 모든 빈 줄
  • +2p:현재 줄에서 두 줄 아래 줄을 인쇄합니다.
  • q: 종료 명령

ex행 0을 빈 행으로 계산하려면(행 1이 비어 있지 않은 경우에만) 행 1 앞에 빈 행을 삽입한 다음 행 1-2를 필터링하면 좀 더 정교해져야 합니다 uniq. 하지만 지금은 awk목적을 달성하기 위해 를 사용하는 것이 더 좋습니다.

답변3

쉽게 완료 perl:

$ perl -n -e 'BEGIN {$count=0}; 
              if (/^\s*$/) {$count=0} else {$count++};
              if ($count eq 2) {print}' alexandru.txt 
foo2
bar2
spam2
eggs2

답변4

빈 줄 이후 매 두 번째 줄을 인쇄하는 경우 인코딩 값은 2입니다.

시도 해봐:

awk 'BEGIN { empty=1; n=0; } { if ($0 ~ /^$/) { empty=1; n=0; } else if (empty) { n++; if (n==2) { empty=0; print; } } }' file.txt

file.txt는 현재 디렉터리에서 구문 분석할 파일의 이름입니다.

n번째 줄을 검색할 때 모든 빈 줄 뒤에는 항상 n개 이상의 줄이 뒤따른다고 가정해 보세요. 그렇죠?

테스트 출력은 다음과 같습니다.

awk 'BEGIN { empty=1; n=0; } { if ($0 ~ /^$/) { empty=1; n=0; } else if (empty) { n++; if (n==2) { empty=0; print; } } }' file.txt
foo2
bar2
spam2
eggs2

----

유명한 페이지가 있습니다:Sed - Bruce Barnett의 소개 및 튜토리얼

아래에서 이 버전을 사용해 보세요. 귀하의 버전과 매우 유사합니다.

sed -n '{
2 {
p
}
/^$/ {n
n
p}}' file.txt

foo2
bar2
spam2
eggs2

관련 정보