![파일의 마지막 줄만 인쇄한 다음 파일의 첫 번째 줄을 인쇄하는 방법이 awk에 있습니까?](https://linux55.com/image/104692/%ED%8C%8C%EC%9D%BC%EC%9D%98%20%EB%A7%88%EC%A7%80%EB%A7%89%20%EC%A4%84%EB%A7%8C%20%EC%9D%B8%EC%87%84%ED%95%9C%20%EB%8B%A4%EC%9D%8C%20%ED%8C%8C%EC%9D%BC%EC%9D%98%20%EC%B2%AB%20%EB%B2%88%EC%A7%B8%20%EC%A4%84%EC%9D%84%20%EC%9D%B8%EC%87%84%ED%95%98%EB%8A%94%20%EB%B0%A9%EB%B2%95%EC%9D%B4%20awk%EC%97%90%20%EC%9E%88%EC%8A%B5%EB%8B%88%EA%B9%8C%3F.png)
검색했지만 답변을 찾지 못했습니다. 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