вызов 'nl', впитывающий весь вход перед нумерацией

[118079] Это не адрес. Это имя хоста. (или столько, сколько поместится в записи wtmp.)[118080]
1
14.01.2015, 12:53
2 ответа

Можно переместить расширенное пространство (область подкачки) в конец нераспределенного пространства, а затем изменить размер sda1 . Я имею в виду, что вы можете просто удалить его, изменить размер sda1 и затем создать пространство подкачки в конце диска.

-121--186453-

Попробуйте использовать $1, $2, $3, $4,... для аргументов командной строки (вместо использования read)

Вызовите скрипт с помощью:

./script.sh 121212 "Jan 14" 00 12
-121--61889-

Если вы предполагаете, что nl должен буферизировать весь ввод, просто чтобы измерить максимальное требуемое число, что совсем не соответствует духу потоковых фильтров. За редкими исключениями (например, sort ), основные утилиты пытаются обработать потоки немедленно - особенно потому, что они могут использоваться в практически бесконечном конвейере (например, поток журнала, который постепенно фильтруется через nl и перенаправляется в файл, может накапливать довольно много данных).

Стандартным способом обработки набивки является простое указание максимальной ожидаемой ширины в качестве параметра. В этом случае можно либо отключить набивку (я все равно предпочитаю это, имеет смысл просто иметь разделенный пробелом столбец спереди), либо установить другую ширину. Сравните:

seq 0 10000000 | nl -w12 # default right-justify, 12 character width

seq 0 10000000 | nl -w1 # default right-justify, 1 character width (no padding)

seq 0 10000000 | nl -w1 -s' ' # right-justify, space delimited instead of tab

seq 0 10000000 | nl -nln # left-justify

Если вы действительно хотите сделать это автоматически, просто используйте wc -l , чтобы сначала измерить длину, а затем установите -w соответствующим образом.

4
27.01.2020, 23:17

seq 0 10000000 расширяется до десяти миллионов и одной строки, которую bash необходимо хранить в памяти, чтобы она могла перебирать значения. That - то, что прерывается, мне удалось прервать его до того, как он израсходовал всю память + своп на моей системе (я не хотел, чтобы внепамять убивала какой-то другой процесс, хотя современные кернелы корректно определят, какой процесс убивать).

Вы можете проверить, что это не nl, заменив nl на cat или wc, или любой другой командой, которая считывает его вход. Версия

muru должна быть эквивалентна, не требуя bash для промежуточного хранения всех этих данных.

EDIT: если речь идет о нумерации, то я бы ожидал, что 10-секундное чтение manpage приведет к варианту nl -w.... Используйте nl -w8. Если Вас тогда не устраивает большой разрыв между номером строки и ее содержимым (из-за используемой по умолчанию вкладки), Вы можете добавить -s''; все это есть в manpage, легко найти. Но мне все равно интересно, зачем нужен цикл в этом вопросе.

1
27.01.2020, 23:17

Теги

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