앗

행 수를 알 수 없는 시가 있는데 마지막에서 두 번째 행만 표시하고 싶습니다. 어떤 명령을 사용해야 합니까?

답변1

이를 수행하는 방법은 여러 가지가 있지만 이것이 제가 찾은 가장 빠른 방법이고 제 생각에는 가장 깨끗한 방법입니다.

시가 라는 파일에 작성되었다고 가정하면 다음을 poem사용할 수 있습니다.

tail -n 2 poem | head -n 1

tail -n 2 poem파일의 마지막 두 줄이 기록됩니다 poem.

head -n 1이전 명령에서 제공된 출력의 첫 번째 줄이 기록됩니다 tail.

답변2

에드를 사용하세요!

ed -s poems <<< $'$-1\n'

poems이는 ed에게 스크립트 모드( )에서 파일을 열도록 지시한 -s다음(추가 메시지를 인쇄하지 않도록) 여기 문자열에 "파일의 마지막 줄로 이동( $), 마이너스 1"이라는 주소 지정 명령을 보냅니다. 선.

입력 시 파일이 주어지면~의:

A is for awk, which runs like a snail, and
B is for biff, which reads all your mail.

C is for cc, as hackers recall, while
D is for dd, the command that does all.

E is for emacs, which rebinds your keys, and
F is for fsck, which rebuilds your trees.

G is for grep, a clever detective, while
H is for halt, which may seem defective.

I is for indent, which rarely amuses, and
J is for join, which nobody uses.

K is for kill, which makes you the boss, while
L is for lex, which is missing from DOS.

M is for more, from which Less was begot, and
N is for nice, which it really is not.

O is for od, which prints out things nice, while
P is for passwd, which reads in strings twice.

Q is for quota, a Berkeley-type fable, and
R is for ranlib, for sorting ar sic table.

S is for spell, which attempts to belittle, while
T is for true, which does very little.

U is for uniq, which is used after Sort, and
V is for vi, which is hard to abort.

W is for whoami, which tells you your name, while
X is, well, X, of dubious fame.

Y is for yes, which makes an impression, and
Z is for zcat, which handles compression.

...결과 출력은 다음과 같습니다.

Y is for yes, which makes an impression, and

답변3

할 수 있어요

sed '2q;d' <(tac infile)

tacinfilecat우리는 파일을 input 으로 전달한 것처럼 역순으로 인쇄할 것입니다 sed. 그러면 두 번째 줄(여기서는 첫 번째 줄만)을 제외한 모든 줄이 제거되고 즉시 종료됩니다.

또는:

tail -n2 infile | sed '2d'

아니면 sed오직

sed 'x;$!d' <infile

sed한 번에 한 라인씩 읽고 예약된 공간을 사용하여 x현재 라인 처리를 저장하고 !d한 번 인쇄합니다(삭제하지 않음).sed모든 줄(또는 마지막 줄)을 읽으십시오.sed예약된 공간은 하나만 있을 수 있으므로 마지막 행인 경우 예약된 공간에는 끝에서 두 번째 행이 포함됩니다.

sed -n 'x;$p' <infile

답변4

이는 GNU awk(Linux) 및 BSD awk(Mac)에서 작동합니다.

빈 줄을 무시할 수도 있습니다. 이 경우 awk 'NF' file.txt이 페이지에 설명된 다른 방법 중 하나를 사용하여 출력을 파이프할 수 있습니다.

awk를 통해 이 모든 작업을 한 번에 수행할 수도 있습니다.

awk 'NF { a=b ; b=$0 } END { print a }' file.txt
  • NF
    데이터가 포함된 행만 처리됩니다. NF행의 필드 수를 나타내며 0보다 큰 값은 "true"로 간주됩니다.
    • { a=b ; b=$0 }
      현재 비어 있지 않은 줄을 로 저장 b하고 비어 있지 않은 이전 줄을 로 저장합니다 a.
  • END { print a }
    전체 파일을 확인한 후 a(공백이 아닌 마지막 줄에서 두 번째 줄)의 최종 값을 인쇄합니다.

빈 줄을 생략하지 않으려면 다음을 제거하세요 NF.

awk '{ a=b ; b=$0 } END { print a }' file.txt

관련 정보