2021-02-26 shell与python的交互

一、第一次的处理脚本,没有考虑到shell对入参的个数有限制

1、python脚本:查询要处理的省份信息输出到一个文件中,即文件1

#coding=utf-8
import pandas as pd
import os,sys

work_path=os.getcwd()
file1 = os.path.join(work_path,'code_list.csv')
data = pd.read_csv(file1,sep=',',index_col=0)
for i in range(3,len(sys.argv)):
    print i-2,sys.argv[1],sys.argv[2],data[data['name']==sys.argv[i]].iloc[0,0],\
    data[data['name']==sys.argv[i]].iloc[0,1]

2、shell脚本:读取要处理的省份信息即文件1,调用对应的shell脚本,将处理结果输出到文件2中;读取文件2中要处理的订单信息到文件3中。

#!/bin/bash

FILENAME1='./'$1'to_qurry.txt'
FILENAME2='./'$1'qurry_result.txt'
FILENAME3='./'$1'result.sql'

echo > $FILENAME1
echo > $FILENAME2
echo > $FILENAME3

python diff.py $1 $2 $3 > ${FILENAME1}

while read line
do
index=`echo $line| awk '{print $1}'`
start_time=`echo $line| awk '{print $2}'`
end_time=`echo $line | awk '{print $3}'`
province_code=`echo $line | awk '{print $4}'`
province_name=`echo $line | awk '{print $5}'`
echo "开始处理${province_name}省${start_time}到${end_time}的订单......"
if [ $index == 1 ];then
sh shell1.sh $province_code $start_time $end_time   >> ${FILENAME2}
else
sh shell2.sh $province_code $start_time $end_time  >> ${FILENAME2}
fi
done < ${FILENAME1}

cat ${FILENAME2} | awk -F '\t' '{if ($3==2) printf("update %s set order_status=4 where order_code = '\''%s'\'';\n",$1,$2) }' > ${FILENAME3}
echo "处理结束."
echo "--------------------------"
echo "要处理的订单信息:"
cat ${FILENAME3}

3、连库处理

读取要处理的订单信息,连库处理。

二、第二次的处理脚本,将多个省份作为一个变长参数进行传递

1、python脚本1(diff1.py):查询要处理的省份信息(作为一个变长参数传递)输出到一个文件中,即文件1

#coding:utf-8
import pandas as pd
import os,sys

def foo(argv1,argv2,*argv3):
	print argv3[0]
foo(sys.argv[1],sys.argv[2],sys.argv[3])

2、python脚本2(diff1.py):读取文件1中保存的省份信息,处理成下一步shell脚本方便读取的方式。

#coding:utf-8
import pandas as pd
import os,sys

code_list = pd.read_csv('./code_list.csv',index_col=0)
to_qurry = pd.read_csv('./to_qurry.csv').columns
count=0
for code_name in to_qurry:
	count+=1
	tmp = code_list[code_list['name']==code_name]
	print count,sys.argv[1],sys.argv[2],tmp.iloc[0,0],tmp.iloc[0,1]

3、shell脚本(process.sh):读取要处理的省份信息即文件2,调用对应的shell脚本,将处理结果输出到文件3中;读取文件3中要处理的订单信息到文件4中。

#!/bin/bash

FILENAME1='./to_qurry.csv'
FILENAME2='./'$1'to_qurry.txt'
FILENAME3='./'$1'qurry_result.txt'
FILENAME4='./'$1'result.sql'

echo > $FILENAME1
echo > $FILENAME2
echo > $FILENAME3
echo > $FILENAME4

python diff.py $1 $2 $3 > ${FILENAME1}
python diff1.py $1 $2 > ${FILENAME2}


while read line
do
index=`echo $line| awk '{print $1}'`
start_time=`echo $line| awk '{print $2}'`
end_time=`echo $line | awk '{print $3}'`
province_code=`echo $line | awk '{print $4}'`
province_name=`echo $line | awk '{print $5}'`
echo "开始处理${province_name}省${start_time}到${end_time}的订单......"
if [ $index == 1 ];then
sh shell1.sh $province_code $start_time $end_time   >> ${FILENAME3}
else
sh shell2.sh $province_code $start_time $end_time  >> ${FILENAME3}
fi
done < ${FILENAME2}

cat ${FILENAME3} | awk -F '\t' '{if ($3==2) printf("update %s set order_status=4 where order_code = '\''%s'\'';\n",$1,$2) }' > ${FILENAME4}
echo "处理结束."
echo "--------------------------"
echo "要处理的订单信息:"
cat ${FILENAME4}

PS:调用方式:sh process.sh 2021-02-28 2021-03-01 安徽,北京,贵州,海南,河北,黑龙江,辽宁,山东,陕西,云南,浙江;

变长参数传递,用的不是很熟,曲折处理了下,用一个py脚本做了过渡处理,汗~~~

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值