Unix에서 파일의 n번째 줄을 찾기 위해 "tail -n 1"을 사용하는 이유는 무엇입니까?

Unix에서 파일의 n번째 줄을 찾기 위해 "tail -n 1"을 사용하는 이유는 무엇입니까?

나는 사람들이 일반적으로 head -n | tail -n 1셸을 사용하여 파일의 n번째 줄을 찾는다는 것을 알았습니다.

head -7예를 들어, 파일의 7행을 찾으라는 요청 을 받으면 tail?

답변1

head -7

또는 현대적이고 표준적인 것과 동등한 것:

head -n 7

입력의 처음 7줄(또는 더 적은 경우 최대 7줄)을 인쇄합니다.

파이프를 tail -n 1통해 마지막 행을 가져오므로 행 수가 적은 경우 7번째 행 또는 마지막 행만 가져옵니다.

7 만 가져오려면 (또는 행 수가 적은 경우 아무것도 가져오지 않음) 다음을 사용할 수 있습니다.

tail -n +7 | head -n 1

값이나 행 번호가 클수록 파이프를 통과하는 데이터가 적기 때문에 효율성이 더 높습니다.

sed다음 명령을 사용하여 이 작업을 수행 할 수도 있습니다 .

sed '7!d;q'

sed이는 전문화 head되지 tail않고 이보다 긴 줄을 처리할 수 있도록 요구되지 않기 때문에 효율성이 떨어질 수 있지만 sed구현에 따라 지나치게 긴 줄에서는 작동하지 않을 수 있습니다.headtailLINE_MAX

주석 에서 제안한 대로 읽기를 중단하는 대신 7 행을sed -n 7p 인쇄한 후에도 전체 입력을 읽으십시오 . 이는 덜 효율적이지만, 명령 출력에 적용할 때와 같이 7행을 출력한 후 명령을 종료 하고 싶지 않은 경우에는 이것이 더 나을 수 있습니다.sed '7!d'head

관련 정보