텍스트 문서의 마지막 단락을 표시하는 방법은 무엇입니까?

텍스트 문서의 마지막 단락을 표시하는 방법은 무엇입니까?

단어 수가 100개가 조금 넘는 세 개의 작은 단락이 있다고 가정해 보겠습니다. 마지막 단락만 표시하려면 어떻게 해야 합니까?

답변1

awk단락 모드를 사용할 수 있습니다 ( RS비어 있는 경우 단락은 일련의 빈 줄로 구분되며 선행 및 후행 빈 줄은 무시됩니다).

awk -v RS= 'END{print}' < file.txt

입력 파일에 단락이 포함되어 있지 않으면(비어 있거나 빈 줄만 포함되어 있는 경우) 빈 줄이 인쇄됩니다. 이를 방지하려면 위의 내용을 다음과 같이 변경할 수 있습니다.

awk -v RS= 'END{if (NR) print}' < file.txt

( NR수량입니다기록(이 경우) 파일에서).

답변2

단락이 빈 줄로 구분되어 있다고 가정하면 다음이 작동합니다(3개의 "테스트" 인스턴스를 파일 이름으로 바꿉니다).

tail -n `expr $(wc -l test | cut -f1 -d' ') - \
              $(grep -ERn '^$' test | tail -n1 | grep -o '[0-9]\+')` test

더 간단한 해결책이 있다고 확신합니다. 여기서는 마지막 빈 줄을 찾고 grep -ERn '^$' test | tail -n1첫 번째 빈 줄 앞의 모든 것을 제거합니다.tail

답변3

입력에 뒤에 공백 줄이 없다고 가정하면 다음을 실행할 수 있습니다.

sed 'H;/^$/h;$!d;x' infile

이는 예약된 공간을 각 단락의 내용으로 덮어쓰고 스왑 버퍼의 마지막 줄을 제외한 패턴 공간을 제거합니다. 출력에서 맨 앞에 빈 줄이 표시되지만 이는 쉽게 제거할 수 있습니다. 연습용으로 남겨두겠습니다.

답변4

정교한선장 모자대답을 얻으려면 더 간단한 작업을 수행할 수 있습니다 awk.

tail -n$(tac myFile.txt | awk '/^$/{print NR-1; exit}') myFile.txt

단락이 빈 줄로 구분되어 있거나 공백만 포함되어 있다고 가정합니다.

tac편집: 실제로 작동하려면 와 사이에 혼동이 rev있습니다 .tac

편집: 파일에 빈 줄이 뒤따르는 것이 걱정된다면 다음을 사용하여 문제를 해결할 수 있습니다 awk.

tail -n $(tac myFile.txt | \
          awk 'BEGIN{i=1} /^$/{if (NR == i) {i++} else {print NR-1; exit}}') \
     myFile.txt

테스트해본 결과 예상대로 작동하는 것 같습니다!

관련 정보