nl: 두 번째 줄에서 줄 번호를 시작하는 방법은 무엇입니까?

nl: 두 번째 줄에서 줄 번호를 시작하는 방법은 무엇입니까?

이것이 표준 출력이다ls -ln | nl

wolf@linux:~$ ls -lh | nl
     1  total 24
     2  -rw-rw-r-- 1 wolf wolf  186 Sep  24 22:18 01.py
     3  -rw-rw-r-- 1 wolf wolf  585 Sep  24 22:21 02.py
     4  -rw-rw-r-- 1 wolf wolf  933 Sep  24 22:26 03.py
wolf@linux:~$

total 24시작 번호 대신 두 번째 줄의 실제 파일/디렉토리로 시작할 수 있습니까?

원하는 출력

wolf@linux:~$ ls -lh | nl
        total 24
     1  -rw-rw-r-- 1 wolf wolf  186 Sep  24 22:18 01.py
     2  -rw-rw-r-- 1 wolf wolf  585 Sep  24 22:21 02.py
     3  -rw-rw-r-- 1 wolf wolf  933 Sep  24 22:26 03.py
wolf@linux:~$

답변1

나머지와 함께 첫 번째 줄을 사용하고 나머지는 다음 줄에 전달합니다.nl

$ ls -lh | { sed -u q; nl; }
total 24
     1  -rw-rw-r-- 1 wolf wolf  186 Sep  24 22:18 01.py
     2  -rw-rw-r-- 1 wolf wolf  585 Sep  24 22:21 02.py
     3  -rw-rw-r-- 1 wolf wolf  933 Sep  24 22:26 03.py

sed(버퍼링을 비활성화하는 데 사용됨 -u) 라인과 quit를 소비하여 종료하기 전에 암시적으로 라인을 인쇄합니다. nl남은 라인을 소모합니다.

첫 번째 줄을 들여쓰려면 다음과 같이 하면 됩니다.

$ ls -lh | { sed -u 's/^/        /;q'; nl; }
        total 24
     1  -rw-rw-r-- 1 wolf wolf  186 Sep  24 22:18 01.py
     2  -rw-rw-r-- 1 wolf wolf  585 Sep  24 22:21 02.py
     3  -rw-rw-r-- 1 wolf wolf  933 Sep  24 22:26 03.py

줄 번호 매기기를 더 아래로 시작하려면 종료 sed시점을 알려주세요.q

$ ls -alh | { sed -u 's/^/        /;3q'; nl; }
        total 24
        drwx------ 1 wolf wolf  186 Sep  24 22:18 .
        drwx------ 1 wolf wolf  186 Sep  24 22:18 ..
     1  -rw-rw-r-- 1 wolf wolf  186 Sep  24 22:18 01.py
     2  -rw-rw-r-- 1 wolf wolf  585 Sep  24 22:21 02.py
     3  -rw-rw-r-- 1 wolf wolf  933 Sep  24 22:26 03.py

/\.\.$/q대신 비슷한 것을 사용할 수도 있습니다 3q.

답변2

이는 nl0부터 시작됩니다.

$ ls -lh | nl -v 0
   0  total 24
   1  -rw-rw-r-- 1 wolf wolf  186 Sep  24 22:18 01.py
   2  -rw-rw-r-- 1 wolf wolf  585 Sep  24 22:21 02.py
   3  -rw-rw-r-- 1 wolf wolf  933 Sep  24 22:26 03.py

답변3

약간 추악하지만 적어도 GNU Coreutils 구현을 사용하면 nl정규식을 통해 번호를 매길 줄을 지정할 수 있습니다. 긴 목록 출력에서 ​​가능한 파일 형식 중 하나가 t아니기 때문입니다.ls1넌 할 수있어

ls -lh | nl -bp'^[^t]'

불행하게도 이는 출력 정렬을 유지하지 않습니다.

아마도 가장 공식적으로 올바른 방법은 ls출력을 별도의 헤더와 본문 부분으로 분할하는 것입니다.

$ ls -lh | sed -e '1s/.*/\\:\\:\\:\n&\n\\:\\:/' | nl

       total 0

     1  -rw-rw-rw- 1 steeldriver steeldriver   0 Sep  9 19:53 bar
     2  -rw-r--r-- 1 steeldriver steeldriver 449 Sep 16 17:41 bash_envs
     3  -rw-rw-rw- 1 steeldriver steeldriver 131 Sep  5 18:13 dirlist
     4  -rw-r--r-- 1 steeldriver steeldriver 359 Sep 13 19:42 error_status

(기본적으로 제목 번호 매기기 스타일은 다음과 같습니다.전혀).

답변4

awk대신 다음을 시도해 볼 수 있습니다 .

ls -lh | awk '{printf("%5s  ",NR==1?" ":NR-1); print}'

그러면 번호가 매겨지지 않은 "전체" 행이 인쇄되고 필드 너비가 5인 숫자가 있는 나머지 모든 행이 오른쪽으로 조정되어 인쇄됩니다. 숫자와 줄 내용 사이의 공백은 두 개의 공백입니다( 형식 5s문자열의 다음 텍스트) printf().\t

"합계" 행이 필요하지 않은 경우 다음을 사용할 수 있습니다.

ls -lh | awk 'NR>1{print (NR-1) "\t" $0}'

또는

ls -lh | awk 'NR>1 {printf("%5s  ",NR-1); print}'

대신에.

관련 정보