2016-04-13 12 views
0

たとえば、番号が4569の場合。 私は今、このためにJAVAのロジックを書いた番号をユニックスの特定の範囲(1000)に分割する方法

1 - 1000 
1001 - 2000 
2001 - 3000 
3001 - 4000 
4000 - 4569 

として出力する必要があるが、私はUNIXに私のコードを移行しています。特定の範囲の数値を分割する単一のライナーはありますか?

+1

あなたは何を今までしてみてくださいましたか? – MarcoS

答えて

1

awkのあるライナーがある可能性があります。最近のbashをお持ちの場合、bash算術を使用することができます。それほど高速ではありません。

$ ./sample.sh 4569 
going for 4569 
1 - 1000 
1001 - 2000 
2001 - 3000 
3001 - 4000 
4001 - 4569 

を印刷し

sample.sh

#!/bin/bash 

((max = $1)) 
((num = 0)) 
echo "going for " $max 

while ((max >= num)); do 
    ((prev = num + 1)) 
    ((num = prev + 999)) 
    if ((num >= max)); then 
      echo $prev "-" $max 
    else 
      echo $prev "-" $num 
    fi 
done 

あなたはそれに応じて変更することができます。 awk

2

awk 'BEGIN{e=999;m=4569;for(i=1;i<=m;i+=1000){k=m-i;if(k<1000){e=k};print i" - "i+e}}' 
1

またはPOSIX互換性:

#!/bin/sh 
max=4569 
num=1 

while [ "$num" -lt "$max" ]; do 
    next=`expr "$num" + "999"` 
    [ "$next" -gt "$max" ] && next="$max" 
    echo "$num - $next" 

    num=`expr "$next" + "1"` 
done 
関連する問題