특정 줄부터 번호가 매겨진 파일을 출력할 수 있는 명령이 있나요?

특정 줄부터 번호가 매겨진 파일을 출력할 수 있는 명령이 있나요?

cat -n file출력에는 file행 번호가 있지만 번호 매기기를 시작할 행을 어떻게 지정합니까? 이를 수행할 수 있는 명령이 있습니까?

이 프로세스를 여러 명령으로 분할하는 것에 대해 생각했습니다. N줄 번호 매기기를 텍스트 파일의 줄부터 시작하려면 다음 을 수행 file.txt하십시오.

  1. 첫 번째 N-1줄을 인쇄하세요.head -$((N-1)) file.txt
  2. 번호가 매겨진 나머지 N줄을 인쇄합니다.tail -n N file.txt | cat -n

그러나 입력이 에서 오는 경우 두 번째 단계는 불가능합니다 stdin. 첫 번째 단계는 모든 것을 소비합니다. AFAIK를 읽고 삭제하려면 임시 파일을 만들어야 합니다.

답변1

awk를 사용하여 이 작업을 수행할 수 있습니다.

awk 'NR >= n { printf("%6d  ", NR-n+1) } 1' n=3

현재 레코드 번호(NR)가 n보다 크거나 같은 행(변수로 전달됨)에 대해 1 기반 줄 접두어를 인쇄합니다. 1마지막은 현재 줄을 인쇄하기 위한 awk 약어입니다.

head(1)필요한 행 수를 읽었을 때 입력 소비를 중지하므로 계속 사용할 수도 있습니다 .

{ head -$((N-1)); cat -n; }

파일에 파이프를 연결하거나 파일을 리디렉션할 수 있습니다.

cat foo | { head -$((N-1)); cat -n; }
{ head -$((N-1)); cat -n; } < foo

관련 정보