「|」で区切られた2つの数値シーケンスを生成します。

「|」で区切られた2つの数値シーケンスを生成します。

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

関連情報