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'
これは私が望むものをほとんど提供しますが、..を|に変更すると混乱します。または「|」)。
必要な2番目の数字は、降順年と同じ形式で生成されます。
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/.*/&|&,/'
… …おそらく効果があるでしょう… …
シェルは1つだけあります:
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