[unix] 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 , -

(모든 크기의 숫자를 지원하지만 특정 숫자 수를 지나면 ( POSIX 로켈에서 10 70 보다 큰 숫자 ) 줄은 백 슬래시로 줄 바꿈됩니다)


답변

tac(cat in reverse)를 사용하여 순서를 바꿀 수 있습니다 . 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


답변