Intereting Posts
Запись видео с камеры и получение номера кадра по требованию Преобразование .odm в .odt Разрешить пользователю выполнять одну команду в качестве другого пользователя Добавить 30 дней ecryptfs-recover-private удаленные файлы? Проблема с добавлением функции в .profile Доступ к файлам из образа BTRFS в аналогичной файловой системе Дистрибутив, который поддерживает гибридную графику intel / nvidia из коробки Могу ли я читать / записывать с / на USB-устройство, которое не перечисляет какое-либо устройство в / dev? Использовать преобразование для захвата определенной страницы из файла PDF? Может ли касификация case bash? Невозможно получить фактический подсчет строк из-за возврата каретки в значения: Как долго длится зубной протеже в dcache? Поиск файлов с использованием сценария оболочки Какой самый безопасный способ передать письмо скрипту через procmail?

Как отображать числа в обратном порядке с помощью seq (1)?

Я перебираю числа в разном порядке. Я могу отображать их в порядке возрастания, даже с такими шагами, как:

$ seq --separator="," 1 10 1,2,3,4,5,6,7,8,9,10 $ seq --separator="," 1 2 10 1,3,5,7,9 

Я также могу отображать их в обратном порядке, ни непрерывный, ни шаг.

 $ seq --separator="," 10 1 $ seq --separator="," 10 2 1 

Нет вывода для вышеприведенных команд.

Информация о моей оболочке:

 $ bash --version GNU bash, version 3.2.25(1)-release (x86_64-redhat-linux-gnu) Copyright (C) 2005 Free Software Foundation, Inc. 

Дайте мне знать, как я смогу отображать числа в порядке убывания?

использовать отрицательное приращение

 seq -s, 10 -2 1 10,8,6,4,2 

В общем, вы не хотите использовать seq , он не переносится (даже в стандартных средах Linux). Если вы используете ksh, zsh или bash4 +, вы можете использовать расширение скобки:

 echo {10..1..2} | tr " " , 10,8,6,4,2 

Другой способ в чистом bash, ksh или zsh:

 for ((i=10;i>0;i-=2)) ; do echo -n "$i," ; done 

Чистый POSIX sh путь:

 i=10 while [ "$i" -gt 2 ]; do printf "$i,"; i=$((i-2)); done echo "$i" 

Теперь стандартные POSIX:

 awk 'BEGIN{for (i = 10; i > 0; i -= 2) print i}' | paste -sd , - 

(интересно, с mawk (и в меньшей степени gawk )) намного быстрее, чем GNU seq для i = 10000000 вместо i = 10 )

Или

 i=10; set -- while [ "$i" -gt 0 ]; do set -- "$@" "$i" i=$(($i - 2)) done IFS=, echo "$*" 

(было бы более эффективным с небольшим количеством итераций, особенно с bash )

Или

 echo 'for(i=10;i>0;i-=2) i' | bc | paste -sd , - 

(который будет поддерживать номера любого размера, но обратите внимание, что прошлое определенного количества цифр (число больше 10 70 в локали POSIX, по крайней мере), строки будут обернуты обратными косыми чертами)

Вы можете изменить порядок, используя tac (cat в обратном порядке). Даже если seq должен вести себя по-разному в разных системах, я думаю, что следующее должно быть максимально переносимым:

 $ seq 1 10 | tr '\012' ',' | sed 's/,$//'; echo 1,2,3,4,5,6,7,8,9,10 $ seq 1 10 | tac | tr '\012' ',' | sed 's/,$//'; echo 10,9,8,7,6,5,4,3,2,1 $ 

Попробуйте:

  seq [OPTION]... FIRST INCREMENT LAST 

Пример:

$ seq 10 -1 1