如何在unix中基于第1列打印范围



我希望我的输出分为两列。第一列是一个递增日期函数的输出。我使用了下面的循环,它将给我日期函数的输出。

start=20200926 
end=$(date -d"2 days ago" +"%Y%m%d")
while [[ $start -le $end ]]
do
echo $start
start=$(date -d"$start + 1 day" +"%Y%m%d")
done
20200930
20201001
20201002
20201003
20201004
20201005
20201006
20201007
20201008
20201009
20201010
20201011

所以,当日期列增加时,我希望我的第二列值也相应地改变。建议我一个脚本

输出:

20200926  2140
20200927  2140
20200928  2140
20200929  2140
20200930  2140
20201001  2140
20201002  2140
20201003  2141
20201004  2141
20201005  2141
20201006  2141
20201007  2141
20201008  2141
20201009  2141
20201010  2142
20201011  2142

在循环中每X次递增一个计数器的一个想法:

col2=2140                                           # starting value for column #2
x=0                                                 # incremental counter; +1 on each pass through loop
y=3                                                 # number of times through loop before incrementing ${col2}
while [[ "${col2}" -le 2142 ]]                      # for demo purposes we'll loop until col2=2142
do
echo "${col2}"
x=$((x+1))
[[ $(( $x % $y )) -eq 0 ]] && col2=$((col2+1))  # when x=y=7 (7 modulo 7 = 0) increment col2
done

这将生成:

2140
2140
2140
2141
2141
2141
2142
2142
2142

添加到OP代码并使用y=7:

start=20200926
end=$(date -d"2 days ago" +"%Y%m%d")
col2=2140
x=0
y=7
while [[ $start -le $end ]]
do
echo "${start} ${col2}"
start=$(date -d"${start} + 1 day" +"%Y%m%d")
x=$((x+1))
[[ $(( ${x} % ${y} )) -eq 0 ]] && col2=$((col2+1))
done

这将生成:

20200926 2140
20200927 2140
20200928 2140
20200929 2140
20200930 2140
20201001 2140
20201002 2140
20201003 2141
20201004 2141
20201005 2141
20201006 2141
20201007 2141
20201008 2141
20201009 2141
20201010 2142
20201011 2142

相关内容

最新更新