Как использовать команду seq в Linux
Опубликовано: 2022-01-29 Команда seq
в Linux генерирует списки чисел в мгновение ока. Но как эту функциональность можно применить на практике? Мы покажем вам, как seq может вам пригодиться.
Команда seq
На первый взгляд, команда seq
в Linux кажется чем-то странным. Это позволяет быстро генерировать последовательности чисел и все! Однако ключевое слово здесь — «быстро». Через мгновение вы увидите, насколько быстро может работать эта маленькая команда.
Однако независимо от того, как они генерируются, насколько полезен список чисел? Команда seq
была добавлена в 8-ю редакцию Unix в 1985 году. С тех пор она существует, так что она должна делать что-то стоящее.
Философия Unix состоит в том, что она полна маленьких утилит, которые делают одну вещь и делают ее хорошо. Одним из центральных принципов этой философии является написание программ, принимающих данные от других программ. Конечно, это также означает, что эти программы должны генерировать выходные данные, которые могут использоваться в качестве входных данных другими программами.
Команда seq
вступает в свои права, когда используется с другими командами, использующими ее вывод, либо через конвейеры, либо через расширение командной строки.
Генерация базового списка
Если вы запустите seq
с одним числом в качестве параметра командной строки, оно будет считаться от одного до этого числа. Затем он печатает числа в окне терминала, по одному числу в строке, как показано ниже:
последовательность 6
Если вы введете два числа в командной строке, первое будет начальным числом, а второе — конечным числом, как показано ниже:
последовательность 4 10
Вы можете установить размер шага, включив третье число. Он находится между начальным и конечным номерами. Мы вводим следующее, чтобы попросить seq
создать список чисел, который начинается с шести, заканчивается на 48 и использует шаг шесть:
последовательность 6 6 48
Счет в обратном порядке
Мы также можем попросить seq
создать список чисел от большего к меньшему. Однако для этого мы должны указать отрицательный шаг.
Следующая команда создает список, который насчитывает от 24 до 12 с шагом 6, потому что мы вводим шаг как отрицательное число:
последовательность 24 -6 12
Счет с десятичными дробями
Номера начала, конца и шага также могут быть десятичными. Если какое-либо из чисел является десятичным, остальные также рассматриваются как десятичные. Следующая команда генерирует список чисел с шагом 0,2:
послед. 1 0,2 2
Скорость след.
seq
невероятно быстр — единственным узким местом является время, необходимое для ввода команды в окне терминала. Чтобы проверить его скорость, давайте запросим список из 250 000 номеров.
Мы вводим следующее, используя команду time
, чтобы увидеть, сколько времени занимает процесс:
время последовательности 250000
Результаты отображаются под списком. Даже на нашем тестовом ПК средней мощности seq
работает на удивление быстро.
Весь список был создан и записан на экран примерно за 1/3 секунды. Если мы перенаправим список в файл, мы даже сможем избежать накладных расходов на ввод в окне терминала.
Для этого набираем следующее:
последовательность времени 250000 > number.txt
Время, необходимое для завершения списка и создания файла, теперь составляет около 1/7 секунды.
Использование разделителя
Символ новой строки — это символ по умолчанию, отображаемый между каждым числом в списке. Вот почему они отображаются в виде вертикального списка, где каждое число находится в отдельной строке. Если вам нужно, вы можете указать другой разделитель.
Например, вам нужно создать список с разделителями-запятыми, список, разделенный двоеточиями, или любой другой знак препинания или символ. Разделитель на самом деле является строкой, поэтому вы можете использовать более одного символа.
Мы будем использовать параметр -s
(разделитель). Следующая команда создаст список, разделенный запятыми:
сл, 6 6 36
Эта команда будет использовать двоеточие ( :
) в качестве разделителя:
последовательность -s: 6 6 36
Эта команда указывает seq
использовать два дефиса ( -
) в качестве разделителя:
последовательность -s-- 6 6 36
Использование строк формата
Команда seq
также поддерживает строки форматирования в стиле языка C. Это позволяет вам форматировать вывод с гораздо большим контролем, чем просто указание разделителя. Чтобы использовать строку формата, вы используете параметр -f
(формат).
Следующая команда указывает seq
использовать нули для дополнения вывода до двух символов:
последовательность -f "%02g" 6
Мы можем отформатировать строку любым текстом, который нам нравится, и поместить число в любом месте строки следующим образом:
seq -f "Число %02g в строке C-подобного формата" 6
Быстрый способ установить нулевой отступ
Самый быстрый способ установить нулевой отступ — использовать параметр -w
(равная ширина). Это говорит seq
использовать нули для дополнения чисел, чтобы они все были той же ширины, что и наибольшее число.
Следующая команда считает от 0 до 1000 с шагом 100, и все числа будут дополнены нулями:
последовательность -w 0 100 1000
Самое длинное число занимает четыре символа, поэтому все более узкие числа дополняются нулями до этой ширины (даже 0 дополняется до четырех нулей).
Трубопровод seq в bc
Установив разделитель в качестве математического символа и передав список в команду bc
, мы можем оценить числа в этом списке.
Следующая команда создает список чисел, разделенных звездочками ( *
), начиная с единицы и заканчивая шестью:
последовательность -с* 6
Если мы передаем этот список в bc
, он оценивает список, используя звездочки ( *
) в качестве символов умножения:
последовательность -s* 6 | До нашей эры
Мы можем сделать это и с другими символами. В приведенной ниже команде знак плюс ( +
) используется для создания списка, в который добавляются все числа:
последовательность -s+ 5
Мы вводим следующее, чтобы направить это в bc
и оценить список:
последовательность -s+ 5 | До нашей эры
Создание файлов с последовательностью
Команда touch
обновляет метки времени и даты в файлах. Если файл не существует, touch создает его. Мы можем использовать расширение командной строки с помощью touch
и seq
, чтобы создать набор файлов с тематическими именами, но с разными номерами.
Мы создадим набор из 10 файлов с одинаковым базовым именем и другим номером (файл-1.txt, файл-2.txt и т. д.). Набираем следующее:
коснитесь $(seq -f "file-%g.txt" 1 10)
Затем мы вводим следующее, чтобы проверить файлы:
ls-файл*
Использование seq в циклах Bash
Мы можем использовать seq
в сценариях Bash для управления циклами с десятичными знаками.
Введите следующий текст в редактор, а затем сохраните его как «loops.sh»:
#!/бин/баш для val в $(seq 5 0,2 6,6); делать echo "Теперь значение: $val" Выполнено
Затем мы вводим следующее, чтобы сделать наш новый скрипт исполняемым:
chmod +x loop.sh
Когда мы запускаем скрипт, счетчик циклов печатается в окне терминала. Затем мы можем ввести следующее, чтобы увидеть, как счетчик десятичного цикла увеличивается с каждой итерацией цикла:
./loop.sh
Помните, что seq
тоже может считать в обратном порядке; вы можете использовать это в циклах таким же образом.
Красиво и просто
Одна вещь о seq
заключается в том, что здесь не так много кривой обучения. У него освежающе короткая man
страница, но вы все равно можете использовать ее интересными способами.
Поскольку нам часто нужно быстро создавать тестовые файлы с реалистичными размерами, мы используем seq
со строкой формата. Затем мы перенаправляем вывод для создания файла, содержащего столько строк фиктивных данных, сколько нам нужно.
Команды Linux | ||
Файлы | tar · pv · cat · tac · chmod · grep · diff · sed · ar · man · pushd · popd · fsck · testdisk · seq · fd · pandoc · cd · $PATH · awk · join · jq · fold · uniq · journalctl · tail · stat · ls · fstab · echo · less · chgrp · chown · rev · look · strings · type · rename · zip · unzip · mount · umount · install · fdisk · mkfs · rm · rmdir · rsync · df · gpg · vi · nano · mkdir · du · ln · patch · convert · rclone · shred · srm | |
Процессы | alias · screen · top · nice · renice · progress · strace · systemd · tmux · chsh · history · at · batch · free · which · dmesg · chfn · usermod · ps · chroot · xargs · tty · pinky · lsof · vmstat · тайм-аут · стена · да · убить · спать · sudo · su · время · groupadd · usermod · группы · lshw · выключение · перезагрузка · halt · poweroff · passwd · lscpu · crontab · дата · bg · fg | |
Сеть | netstat · ping · traceroute · ip · ss · whois · fail2ban · bmon · dig · finger · nmap · ftp · curl · wget · who · whoami · w · iptables · ssh-keygen · ufw |
СВЯЗАННЫЕ С: Лучшие ноутбуки с Linux для разработчиков и энтузиастов