0

私がやろうとしているのは、ユーザーが KornShell (ksh) スクリプトを介して入力した 2 つの数字の間で、偶数であるすべての数字をリストすることです。したがって、ユーザーが最初の数字2を入力すると、2 番目の数字25が表示されます

2,4,6,8,10,12,14,16,18,20,22,24
4

6 に答える 6

2

これはとで動作するはずでksh93ありbash、必要ではないseqperl、使用するOSによってはインストールされない可能性があります。

function evens {
  for((i=($1+($1%2));i<($2-3);i+=2));do printf "%s," $i;done
  echo $((i+2))
}

$ evens 2 25
2,4,6,8,10,12,14,16,18,20,24
$ evens 3 24
4,6,8,10,12,14,16,18,20,24
$ evens 0 9
0,2,4,8
于 2013-03-24T00:09:44.947 に答える
2
first=2 # from user
last=25 # from user
seq $first 2 $last
于 2013-03-23T22:20:13.530 に答える
2

startksh では、変数とを使用したと仮定しますend

set -A evens                             # use an array to store the numbers
n=0
i=$start
(( i % 2 == 1 )) && (( i+=1 ))    # start at an even number
while (( i <= end )); do
  evens[n]=$i
  (( n+=1 ))
  (( i+=2 ))
done
IFS=,  
echo "${evens[*]}"                       # output comma separated string

出力

2,4,6,8,10,12,14,16,18,20,22,24
于 2013-03-23T22:58:12.277 に答える
1

shell scriptシェル、、、などawkでそれを行う方法はたくさんありますseq...

質問にタグを付けたので、 vimviを追加しました:

fun! GetEven(f,t)
    let ff=a:f%2?a:f+1:a:f
    echom join(range(ff,a:t,2),",")
endf

その関数をソースし、入力:call GetEven(2,25)すると、期待される出力が表示されます。

現在、コマンド領域にエコーします。ファイルに表示する場合は、putまたはを使用するだけsetlineで簡単です。

于 2013-03-23T23:52:15.090 に答える
0

出力をフォーマットするオプションを設定first=$(($1+($1%2)))して使用することにより、以下を使用できます。-sseq

first=$(($1+($1%2)))
last=$2
seq -s, $first 2 $last

呼び出されたスクリプトとして保存し、次のevens偶数の値で呼び出します$first

$ ./evens 2 25
2,4,6,8,10,12,14,16,18,20,22,24

$firstまたは:の奇数値

$ ./evens 3 25
4,6,8,10,12,14,16,18,20,22,24
于 2013-03-23T23:49:04.630 に答える
0

使用perl:

perl -e 'print join q{,}, grep { $_ % 2 == 0 } (shift .. shift)' 2 25

次の結果が得られます。

2,4,6,8,10,12,14,16,18,20,22,24

編集して末尾の改行を修正します。

perl -e 'print join( q{,}, grep { $_ % 2 == 0 } (shift .. shift) ), "\n"' 2 25
于 2013-03-23T22:25:22.347 に答える