seq
저는 bash(CentOS 5)를 사용하고 있으며 이 출력을 생성하고 싶습니다( 또는 둘 다 사용할 수 있다고 가정합니까 echo
?).
1|1,
2|2,
3|3,
....
31|31,
32|32,
33|33,
나는 예를 찾기 위해 2시간 넘게 인터넷 검색을 해왔고 seq
내가 생각해 낼 수 있는 가장 가까운 것은 다음과 같습니다.
echo {1..31}..{1..31} | tr ' ' '\n'
이것은 내가 원하는 것을 거의 제공하지만 ..를 |로 변경하면 엉망이 됩니다. 또는 "|").
필요한 두 번째 숫자는 내림차순 연도와 동일한 형식으로 생성됩니다.
2015|2015,
2014|2014,
...
1938|1938,
1937|1937,
1936|1936,
두 목록을 모두 수동으로 입력했지만 향후 요구 사항과 학습을 위해 명령줄에서 이 작업을 수행하는 방법에 대한 의견을 보내 주시면 감사 seq
하겠습니다 echo
.
답변1
다음을 수행해야 합니다.
seq 0 31 | awk '{ print $1"|"$1", " }'
내림차순:
seq 31 -1 0 | awk '{ print $1"|"$1", " }'
이들은 awk를 사용하여 파이프 문자로 구분된 각 줄의 숫자를 복사합니다.
또는 순수한 bash를 사용하십시오(의견에서 DopeGhoti가 제안한 대로).
for n in {0..31}; do printf "%d|%d,\n" $n $n; done
for n in {31..0}; do printf "%d|%d,\n" $n $n; done
답변2
내 반전:
순수한
awk
awk 'BEGIN{for(;n<31;)print ++n"|"n","}'
printf
+xargs
printf '%s\n' {0..31} | xargs -I {} echo "{}|{},"
repeat
루프에zsh
n=0; repeat 32 echo "$n|$((n++)),"
답변3
seq 100|sed 's/.*/&|&,/'
……아마도 효과가 있을 텐데……
쉘은 하나만 있습니다:
i=-1 x=31
while [ "$i" -lt "$x" ]
do echo "$((i+=1))|$i,"
done
답변4
가장 간단한 솔루션(ksh93, bash, zsh):
printf '%s|%s,\n' {1..31}{,} ### Ascending sequence.
printf '%s|%s,\n' {2015..1936}{,} ### Descending sequence.
또는 루프를 사용해야 하는 경우:
i=0 x=31
while (( i++ < x ))
do echo "$i|$i,"
done