행 수를 알 수 없는 시가 있는데 마지막에서 두 번째 행만 표시하고 싶습니다. 어떤 명령을 사용해야 합니까?
답변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)
tac
infile
cat
우리는 파일을 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