나는 이 파일을 가지고 있습니다 :
a
b
c
d
e
f
첫 번째 행 앞에 마지막 행을 복사하고 싶으므로 다음과 같은 결과를 얻습니다.
f
a
b
c
d
e
f
sed
또는 에서 이 작업을 어떻게 수행할 수 있나요 awk
?
답변1
그리고 ed
:
$ printf '$t0\n,p\n' | ed -s file
f
a
b
c
d
e
f
t
의 명령은 ed
지정된 라인(여기서는 $
마지막 라인)에서 인수로 지정된 라인(여기서는 0
첫 번째 라인 앞에 삽입됨) 다음으로 라인을 전송/복사합니다. 이 ,p
명령은 편집 버퍼의 내용을 인쇄합니다( w
결과를 다시 파일에 기록하도록 변경).
답변2
순수한 sed
:
sed 'H;1h;$!d;G' file.txt
모든 행은 예약된 공간에 수집된 후 마지막 행에 추가됩니다.
H
현재 행을 예약된 공간에 추가합니다. 불행하게도 이는 개행으로 시작하는 공간을 예약하므로1h
첫 번째 줄의 경우 예약된 공간은 이전 개행 없이 해당 줄로 덮어쓰여집니다.$!d
!
이것이 마지막 줄($
) 이 아니면d
아직 인쇄하고 싶지 않기 때문에 해당 줄을 삭제한다는 의미입니다.G
다른 행에 대한d
처리가 중지되었으므로 마지막 행에 대해서만 실행됩니다. 이제 예약된 공간(처음부터 마지막까지)에 수집한 모든 줄이 명령을 사용하여 현재(마지막) 줄에 추가되고G
모든 내용이 스크립트 끝에 인쇄됩니다.
답변3
아니면 sed 없이 이렇게 하세요.
tail -1 list && cat list
답변4
GNU awk:
awk 'ENDFILE { if(NR==FNR) print } NR!=FNR' infile{,}
휴대용 awk:
awk 'NR!=FNR && !f { f=1; print p } NR!=FNR; { p=$0 }' infile{,}