以下sql
代码将插入文本文件中,作为input.txt的输入:
insert into t_agg_sgsn_gprs_usage
select
served_imsi as imsi,
served_msisdn as msisdn,
NVL(cell_identity,'-1') as cell_id,
NVL(trim(to_char(location_area_code,'99999999')),'UNKNOWN'),
substr(served_imei,1,8) tac_code,
to_char(to_timestamp(record_opening_time,'YYYYMMDDHH24MISS'),'YYYYMMDD')
as call_dt,
'ajay' as loaded_dt,
count(1) as cdr_count,
sum(data_volume_uplink) as uploaded_data_volume,
sum(data_volume_downlink) as downloaded_data_volume,
case
when substr(imsi,6,2)='65'
then substr(imsi,1,9)
else substr(imsi,1,5)
end imsi_prefix
from
t_cdrc_sgsn_pdp_18
where loaded_dt LIKE 'ajay%' AND trim(served_imsi) != ''
AND trim(served_msisdn) != '' AND trim(served_imei) != ''
group by imsi, msisdn, tac_code, cell_id, location_area_code, call_dt;
我正在编写一个unix脚本,它应该为输出提供加1的日期,并附加到一个sql文件(changer.sql),直到指定的日期。
insert into t_agg_sgsn_gprs_usage
select
served_imsi as imsi,
served_msisdn as msisdn,
NVL(cell_identity,'-1') as cell_id,
NVL(trim(to_char(location_area_code,'99999999')),'UNKNOWN'),
substr(served_imei,1,8) tac_code,
to_char(to_timestamp(record_opening_time,'YYYYMMDDHH24MISS'),'YYYYMMDD') as call_dt,
'2012-10-17' as loaded_dt,
count(1) as cdr_count,
sum(data_volume_uplink) as uploaded_data_volume,
sum(data_volume_downlink) as downloaded_data_volume,
case when substr(imsi,6,2)='65' then substr(imsi,1,9) else substr(imsi,1,5) end imsi_prefix
from
t_cdrc_sgsn_pdp_18
where loaded_dt LIKE '2012-10-17%' AND trim(served_imsi) != '' AND trim(served_msisdn) != '' AND trim(served_imei) != ''
group by imsi, msisdn, tac_code, cell_id, location_area_code, call_dt;
insert into t_agg_sgsn_gprs_usage
select
served_imsi as imsi,
served_msisdn as msisdn,
NVL(cell_identity,'-1') as cell_id,
NVL(trim(to_char(location_area_code,'99999999')),'UNKNOWN'),
substr(served_imei,1,8) tac_code,
to_char(to_timestamp(record_opening_time,'YYYYMMDDHH24MISS'),'YYYYMMDD') as call_dt,
'2012-10-18' as loaded_dt,
count(1) as cdr_count,
sum(data_volume_uplink) as uploaded_data_volume,
sum(data_volume_downlink) as downloaded_data_volume,
case when substr(imsi,6,2)='65' then substr(imsi,1,9) else substr(imsi,1,5) end imsi_prefix
from
t_cdrc_sgsn_pdp_18
where loaded_dt LIKE '2012-10-18%' AND trim(served_imsi) != '' AND trim(served_msisdn) != '' AND trim(served_imei) != ''
group by imsi, msisdn, tac_code, cell_id, location_area_code, call_dt;
继续递增并附加到changer.sql
文件中,直到指定的结束日期。
以下是我到目前为止的情况,但仍未产生预期的结果:
startdate = `date +"%y-%m-%d"`
set startdate = 2012-10-17
enddate = `date “+%y-%m-%d`
set enddate = 2012-12-22
for($startdate <= $enddate)
do
for file in $(grep -il "ajay" input.txt)
do
sed -e "s/ajay/$startdate/ig" $file >> changer.sql
done
$startdate --startdate="-1 days ago"
done
答案 0 :(得分:3)
考虑到您的问题只涉及bash,您有以下错误:
1 - 你会为此做什么:
startdate=...
set startdate=...
2 - 你的语法在bash中的赋值是错误的;你不应该有空格:
rvalue=lvalue
startdate=`date +"%y-%m-%d"`
3 - for
循环的这种语法错误;猜你想要一个while
循环:
for ($startdate <= $enddate) *wrong*
do ...
done
while (( $startdate <= $enddate )); do
...
done
4 - 你对此有何期待:
$startdate --startdate="-1 days ago"
您可能会尝试按1 day
减少$ startdate的值,因为您需要执行此操作:
startdate=$(date -d $startdate' -1 days' +"%y-%m-%d")