使用场景
需要查找最近修改时间在指定范围内的hive表或者hive表的相关分区,代码如下:
hive_tbl_path=path #hive表的路径
txt=`hdfs dfs -ls $hive_tbl_path | awk '
BEGIN {
IFS="\t";
n_days_ago=strftime("%Y-%m-%d%H:%M",systime()-1800)
}{
if($6$7>n_days_ago){print $8}
}'`
#IFS:Linux系统的分隔符
#systime()-1800:当前时间半小时,可以任意指定
#$6:日期,$7:时分,$8:hive表的路径
OLD_IFS="$IFS"
IFS=,
ntxt=${txt//[[:space:]]/,} #将分隔符换成逗号
arr=($ntxt)#字符串转成数组
dh=""
len=${#arr[*]}#计算数组长度
n=1
for a in ${arr[@]}
do
dt=${a:0-13:13}#取出hive表路径中的分区信息
if [ $n -lt $len ];then
dh=$dh${dt//"/"/""},#替换/
else
dh=$dh${dt//"/"/""}
fi
n=$((n+1))
done
echo "$dh"
IFS="$OLD_IFS"