nl :Как начать номера строк со второй строки?

Используйте htop, чтобы найти ненужные процессы, которые могут занимать процессорное время.

Установить:

sudo apt -получить установку htop

В качестве бонуса вы можете повысить приоритет из htop для своего программного обеспечения Hadoop, чтобы оно работало более плавно.

7
25.09.2020, 14:29
4 ответа

Это заставит 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
13
18.03.2021, 23:02

Вы можете попробовать 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}'

вместо этого.

6
18.03.2021, 23:02

Это немного некрасиво, но, по крайней мере, с реализацией 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

(по умолчанию стиль нумерации заголовков — нет).

7
18.03.2021, 23:02

Замените первую строку чем-то другим, а остальные передайте в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, когда следует quit:

$ 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.

15
18.03.2021, 23:02

Теги

Похожие вопросы