
검색했지만 답변을 찾지 못했습니다. 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