我是 Linux Shell 脚本编写的新手。目前,我正在处理一项要求,该项目在每天的分区中驻留 2 年的数据。每天的分区有 200 个文件需要合并到一个文件中。
我开发了一个代码,可以输入一个利用当前日期的变量。下面是代码片段。我正在寻找一种无需任何手动干预即可使用循环的方法,它应该每周运行一次。
daysToDeduct=<number>
day1=$((daysToDeduct-1))
day2=$((daysToDeduct-2))
day3=$((daysToDeduct-3))
day4=$((daysToDeduct-4))
day5=$((daysToDeduct-5))
day6=$((daysToDeduct-6))
day7=$((daysToDeduct-7))
DAY1=`date --date="$day1 days ago" +%Y%m%d`
DAY2=`date --date="$day2 days ago" +%Y%m%d`
DAY3=`date --date="$day3 days ago" +%Y%m%d`
DAY4=`date --date="$day4 days ago" +%Y%m%d`
DAY5=`date --date="$day5 days ago" +%Y%m%d`
DAY6=`date --date="$day6 days ago" +%Y%m%d`
DAY7=`date --date="$day7 days ago" +%Y%m%d`
hadoop fs -getmerge /apps/..../$DAY1 /.../$DAY1
.
...
hadoop fs -getmerge /apps/..../$DAY7 /.../$DAY7
提前致谢
答案1
这是一些可以帮助您的代码。
#!/bin/bash
for i in $(seq 1 10)
do
echo $i: $(date --date="$i days ago" +%Y%m%d)
done
该片段打印:
1: 20191006
2: 20191005
3: 20191004
4: 20191003
5: 20191002
6: 20191001
7: 20190930
8: 20190929
9: 20190928
10: 20190927
- 您使用 sec 从 1 循环到 200
- 您将其定义为日期(我只是打印)
希望这会有所帮助:)
感谢@Stephen Kitt 的改进!