파일의 마지막 줄만 인쇄한 다음 파일의 첫 번째 줄을 인쇄하는 방법이 awk에 있습니까?

파일의 마지막 줄만 인쇄한 다음 파일의 첫 번째 줄을 인쇄하는 방법이 awk에 있습니까?

검색했지만 답변을 찾지 못했습니다. awk를 사용하여 파일의 마지막 줄(또는 레코드)을 인쇄하고 싶습니다. 첫 번째 줄을 인쇄하는 방법을 알고 있습니다.

NR == 1{print}

그리고 마지막 줄

END{print}

그런데 위치를 어떻게 바꾸나요? 가능합니까? 이 작업을 시도하면 오류가 발생합니다. 통합할 수 있는 방법이 있나요?

NR == 1{print}

명령이 END 명령으로 변환됩니까? 다시 말하지만, 저는 이것을 awk에서만 하고 싶습니다. 감사해요!

답변1

첫 번째 줄을 변수에 저장하십시오.

awk 'NR==1 {first = $0} END {print; print first}' file

전임자. 다음 file과 같이 주어진다

line 1
line 2
line 3
line 4
line 5

그 다음에

$ awk 'NR==1 {first = $0} END {print; print first}' file
line 5
line 1

답변2

getline()AWK에는 다음 줄로 넘어갈 수 있는 기능이 있습니다 . 더 이상 갈 수 없을 때, 즉 파일의 끝에 도달했을 때, 해당 라인의 종료 상태는 0입니다. 따라서 우리가 사용할 수 있는 기본 아이디어는 첫 번째 줄을 변수에 저장하고, 현재 줄을 추적하고, 앞으로 계속 나아가려고 노력하는 것입니다 getline. 할 수 없으면 원하는 순서로 변수를 인쇄합니다.

$ cat input.txt
first line
middle line
last line

$ awk 'NR==1{first=$0};{while (getline line); printf "%s\n%s\n",line,first}' input.txt                                   
last line
first line

관련 정보