
これは標準出力です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
、2 行目の実際のファイル/ディレクトリから始めることは可能でしょうか?
望ましい出力
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
バッファリングを無効にする) は 1 行を消費し、q
終了前にその行を暗黙的に印刷して、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
uit するかを指定します。
$ 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
これnl
により、0 から始まります。
$ 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
のファイルタイプには含まれていないためです。ls
1あなたはできる
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 で右揃えの番号付きで印刷されます。番号と行の内容の間のスペースは 2 つのスペースになります (書式文字列5s
の の後のテキストprintf()
)。これは、 などの他のものに置き換えることができます\t
。
「合計」行が必要ない場合は、次のようにします。
ls -lh | awk 'NR>1{print (NR-1) "\t" $0}'
または
ls -lh | awk 'NR>1 {printf("%5s ",NR-1); print}'
その代わり。