如何在unix中将数字拆分为一个特定的范围(在1000之间)



例如,如果数字是4569。我需要的输出

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

我现在用JAVA编写了逻辑,但我正在将代码迁移到UNIX。有没有单独的线性函数来划分具有特定范围的数字?

使用awk:

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}}'

可能有一个带awk的单行线。如果你最近有一个bash,你可以使用bash算法。没有那么快。

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

它打印

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

您可以相应地对其进行修改。

或兼容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

最新更新