sed 또는 awk를 사용하여 행을 복사하고 새 위치에 삽입하십시오.

sed 또는 awk를 사용하여 행을 복사하고 새 위치에 삽입하십시오.

나는 이 파일을 가지고 있습니다 :

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{,}

관련 정보