cat -n file
출력에는 file
행 번호가 있지만 번호 매기기를 시작할 행을 어떻게 지정합니까? 이를 수행할 수 있는 명령이 있습니까?
이 프로세스를 여러 명령으로 분할하는 것에 대해 생각했습니다. N
줄 번호 매기기를 텍스트 파일의 줄부터 시작하려면 다음 을 수행 file.txt
하십시오.
- 첫 번째
N-1
줄을 인쇄하세요.head -$((N-1)) file.txt
- 번호가 매겨진 나머지
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