1.双重循环
#!/bin/bash
cd /data/pyspark/program/auto_report/zhengyuan/test
begin_date="2019-01-01"
end_date="2019-02-25"
while [ $begin_date != $end_date ]
do
cat dw.dwd_pcrowd_order_di.init.conf | while read line
do
stat_type=`echo ${line} | awk -F" " '{print $1}'`
echo ${stat_type}
ptype=`echo ${line} | awk -F" " '{print $2}'`
echo ${ptype}
stat_value=`echo ${line} | awk -F" " '{print $3}'`
echo ${stat_value}
bdate=`echo ${line} | awk -F" " '{print $4}'`
echo ${bdate}
ds=$1
echo ${ds}
edate=`date -d "1 days ${ds}" +"%Y-%m-%d"`
echo ${edate}
/data/pyspark/program/auto_report/tool/cc_hive -f dwd_online_pcrowd_num_di_his.hql -p "stat_type=${stat_type},ptype=${ptype},stat_value=${stat_value},bdate=${bdate},edate=${edate},ds=${begin_date}"
done
begin_date=`date -d "1 day $begin_date" +%Y-%m-%d`
done
2.循环脚本
#!/bin/bash
begin_date="2018-10-01"
end_date="2019-02-01"
while [ $begin_date != $end_date ]
do
begin_date=`date -d "1 month $begin_date" +%Y-%m-%d`
echo $begin_date
done
3.循环脚本
- 代码内容
#!/bin/bash
cd /data/pyspark/program/auto_report/zhengyuan/test
cat dw.dwd_pcrowd_order_di.init.conf | while read line
do
stat_type=`echo ${line} | awk -F" " '{print $1}'`
echo ${stat_type}
ptype=`echo ${line} | awk -F" " '{print $2}'`
echo ${ptype}
stat_value=`echo ${line} | awk -F" " '{print $3}'`
echo ${stat_value}
bdate=`echo ${line} | awk -F" " '{print $4}'`
echo ${bdate}
ds=$1
echo ${ds}
edate=`date -d "1 days ${ds}" +"%Y-%m-%d"`
echo ${edate}
/data/pyspark/program/auto_report/tool/cc_hive -f dwd_pcrowd_order_di_his.hql -p "stat_type=${stat_type},ptype=${ptype},stat_value=${stat_value},bdate=${bdate},edate=${edate},ds=${ds}"
done
- 文件内容
all d "all" 2018-10-01
all w "all" 2018-10-01
all m "all" 2018-10-01
l1cat d l1_id 2018-10-01
l1cat w l1_id 2018-10-01
l1cat m l1_id 2018-10-01
4.Linux shell中2>&1的含义解释 (全网最全,看完就懂)
3.删除 /data1/airflow/logs 文件下的文件
#!/bin/bash
find /data1/airflow/logs -mtime +30 -name "*.log"|xargs rm -rf
find /data1/airflow/logs -mtime +30 -name "201[0-9]*T*"|xargs rm -rf
find
-mtime +30 #30天之前修改过的文件
-name "*.log" #正则匹配文件名包含 .log 的文件
|xargs rm -rf #文件名传入后,一批一批的删除
4.shell中&&和||的使用方法
1.只有在 && 左边的命令返回真(命令返回值 $? == 0),&& 右边的命令才会被执行。
2.如果||左边的命令(命令1)未执行成功,那么就执行||右边的命令(命令2);或者换句话说,“如果这个命令执行失败了||那么就执行这个命令。
4.wc的使用
wc 有四个参数可选,分别是l,c,m,w
wc -l filename #报告行数
wc -c filename #报告字节数
wc -m filename #报告字符数
wc -w filename #报告单词数
ps -ef|grep airflow|grep scheduler|wc -l #结合 grep 使用
5.awk学习
kill $(ps -ef | grep "airflow scheduler" | awk '{print $2}') #手动杀死包含“airflow scheduler”的进程
-F指定分隔符
awk -F":" '{print $1 $3}' /etc/passwd //$1与$3相连输出,不分隔
awk -F":" '{print $1,$3}' /etc/passwd //多了一个逗号,$1与$3使用空格分隔
awk -F":" '{print $1 " " $3}' /etc/passwd //$1与$3之间手动添加空格分隔
awk -F":" '{print "Username:" $1 "\t\t Uid:" $3 }' /etc/passwd //自定义输出
awk -F: '{print NF}' /etc/passwd //显示每行有多少字段
awk -F: '{print $NF}' /etc/passwd //将每行第NF个字段的值打印出来
6.awk 进阶
begin_date=`date -d "-100 day" +%Y-%m-%d` #外部参数
hdfs dfs -ls /user/spark/applicationHistory |awk '$6<"'"$begin_date"'" {print "hdfs dfs -rm "$8}'|/bin/bash #筛选根据空格分隔的 第六列 小于 begin_date 的值,然后把后面的打印出来,传入第八列的值,最后把打印出来的语句使用bash执行
6.外部传入参数执行hive语句
- 双引号里面的语句是可以传入参数的
- 传入参数之后还可以进行拼接 {table}_di
mdb='kaipao'
hdb='zhengyuan'
table='water_friend_rel'
check_col='create_time'
ds='2019-04-22'
hive -e "show columns from ${hdb}.${table}_di" |grep -v 'WARN:' > tmp1.txt
7.IF使用——shell判断空值
tf=`cat ${mdb}.${table}.timestamp`
if [ -n "${tf}" ]; then
echo "时间戳长度文件存在"
l=${#tf}
else
echo "时间戳长度文件不存在,需创建"
mysql -u datateam -pRJ4f84S4RjfRxRMm -h172.16.8.4 -A ${mdb} -e "select max(${check_col}) from ${mdb}.${table} where ${check_col} >unix_timestamp(date_sub('${ds}', interval 30 day))" |awk 'NR>1' >${mdb}.${table}.timestamp
tf=`cat ${mdb}.${table}.timestamp`
l=${#m1}
fi
8.IF使用——多条件判断和等号
if [[ ! -n "$a" && l -eq 13 ]]; then
echo "全量导入"
#录入全量导入的代码
elif [[ -n "$a" && l -eq 13 ]]; then
echo "增量导入,有表结构,历史有数据,本分区有数据"
elif [[ ! -n "$a" && l -eq 10 ]]; then
echo "全量导入"
elif [[ -n "$a" && l -eq 10 ]]; then
echo "增量导入,有表结构,历史有数据,本分区有数据"
else
echo "其他异常"
fi
9.ncftpget 从服务器下载
#登录服务器(默认进入服务器的 /date/ftp 文件夹)
/usr/local/Cellar/ncftp/3.2.6/bin/ncftpget -u devops -p idongjia@123 172.16.7.103
#下载数据 (cd zy) 进入自己的文件夹
get 文件名
默认下载到 /usr/local/Cellar/ncftp/3.2.6/bin/ 也就是 ncftpget 命令默认的文件夹
10.批量修改文件名的后缀
ls | awk -F ' - 技术-数据算法组 - 东家百科' '{print "mv \"" $0 "\" " $1$2 " " }' | /bin/bash