问你身边真实发生过哪些难以置信的事情?
真
-
树犹如此
需求描述
现有多个具有相同命名格式及内容格式的文件,要求编写shell脚本将它们合并到一个文件中。被合并文件的命名格式为:yyyymmddhhm**s.r,例如:20161018030205.r;文件中包含了若干行记录,每行记录包含26个字符,其中第一个字符为标识位,第7到12个字符为时间(格式:yymmdd),例如:000000161019002925000003n0,该记录的第一个字符0为标识位,第7到12个字符161019表示时间,即16年的10月19日;合并之后的文件的命名格式为:yyyymmdd.txt,例如:20161018.txt。对于合并操作,具体要求为:
1)当天只合并前一天的文件,如今天(10月20日)只合并昨天(10月19日)的文件,文件时间通过文件命名即可看出。2)标识位为0的记录会被写到合并之后的文件中,其他记录将被过滤掉。3)时间(即第7到12个字符的值)为前一天的记录会被写到合并之后的文件中,其他记录将被过滤掉。shell脚本
bin/bash
srcparh=home/zhou/src
exportpath=home/zhou/export
linenum=0
return_fail()
{
exit 1
}
function check_config_dir
{
if!d${srcparh}];then
echo"[error]:${srcparh} has not ex**ted!return_fail
fi
if!d${exportpath}];then
echo"[error]:${exportpath} has not ex**ted!return_fail
fi
}
function merge_file
{
yesterday date yymmdd
yes_date_yy=`date-dyesterday+y%m%d`
yesterday filename
yes_filename=`date-dyesterday+y%m%d`.txt
one_day_ago=`date-dyesterday+y%m%d`
echo"yesterday:${one_day_ago}
echo"`date+y-%m-%d` `date+t`-begin to merge file
if[-s${yes_filename}];then
echo"warn:yesterday file${yes_filename} has ex**ted!now backup it to${yes_filename}_bak.
mv${yes_filename}${yes_filename}_bak
fi
cd${srcparh}
file_l**t_temp=`ls|grep-e"${one_day_ago}"`
file_l**t_count=`ls|grep-e"${one_day_ago}"|wc-l`
echo"
echo"there are${file_l**t_count} yesterday file(s)to be merged.
echo"
{exportpath}/${yes_filename}
for file_name in$file_l**t_temp
do
echo"now to merge${file_name}
cat${file_name}|grep"^0">${file_name}_filter_firstline
while read line
do
echo"
echo"** deal th** line:${line}
echo"
start_data=${line:6:6}+
echo"${start_data}"|grep"+${one_day_ago}+
if[$?eq 0]
then
echo"${line}">>${exportpath}/${yes_filename}
linenum=$[linenum+1]
fi
done<${file_name}_filter_firstline
rm*_filter_firstline
done
if[${linenum}-gt 0]
then
echo"totally${linenum} lines h**emerged.
fi
if!s${exportpath}/${yes_filename}]
then
echo"warn:there ** no yesterday file record!{exportpath}/${yes_filename} **blank!echo"">${exportpath}/${yes_filename}
fi
}
main()
{
echo"
echo"th** mergetool begins running-
check_config_dir;merge_file;echo"-end-
}
execute main function
main$123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105
脚本说明
第一,在脚本的第3到5行,定义了三个变量,其中srcparh用于存放被合并的文件,exportpath用于存放合并之后的文件,linenum用于表示本次写到合并之后的文件中的记录的条数。第二,return_fail用于在执行出现异常(如srcparh或exportpath所表示的路径不存在)时退出程序而不进行后续处理。第三,check_config_dir函数用于检查srcparh或exportpath所表示的路径是否存在,如不存在,则不进行后续处理。第四,merge_file函数是本脚本的核心,它的主要功能是找出srcparh下满足时间条件的文件,并按照需求要求将文件中的记录筛选出来,放到结果文件中。如果有满足条件的记录,那么脚本会显示写入到结果文件中的记录的条数。第五,main函数是整个程序的入口(就像c语言中的main函数一样),它调用了check_config_dir和merge_file函数。脚本执行结果
第一,当srcparh所表示的路径不存在时,执行结果如下:
file_merge_tool.sh
th** merge tool begins running-
[error]:/home/zhou/src has not ex**ted!12341234
第二,当exportpath所表示的路径不存在时,执行结果如下:
file_merge_tool.sh
th** merge tool begins running-
[error]:/home/zhou/export has not ex**ted!12341234
第三,当srcparh所表示的路径存在但不包含任何文件时,执行结果如下:
file_merge_tool.sh
th** merge tool begins running-
yesterday:161019
2016-10-20 16:30:06-begin to merge file
there are 0 yesterday file(s)to be merged.
warn:there ** no yesterday filerecord!home/zhou/export/20161019.txt ** blank!end-1234567891012345678910
第四,现有四个文件20161018030205.r、20161019030254.r、20161019182531.r、20161019213456.r,每个文件的内容如下:
20161018030205.**件:
000000161019002925000003n0
000000161019002931000003n0
300000161018002931000003n0
000000161019002926000009y0
000000161019003150000003n0
20161019030254.**件:
000000161019004925000003n0
000000161019006931000003n0
100000161019006971000004n0
000000161019007926000009y0
200000161019006871000004n0
000000161019008150000003n0
20161019182531.**件:
000000161019001925000003n0
000000161019004931000003n0
000000161018007926000009y0
000000161019007926000009y0
000000161019009150000003n0
000000161017007926000009y0
600000161019007426000009y0
20161019213456.**件:
000000161019002925000003n0
000000161019002931000003n0
000000161019002926000009y0
800000161019002961000003n0
000000161019003150000003n0
将它们上传到srcparh目录下,运行脚本,结果如下:
file_merge_tool.sh
th** merge tool begins running-
yesterday:161019
2016-10-20 17:08:24-begin to merge file
there are 3 yesterday file(s)to be merged.
now to merge 20161019030254.r
now to deal th** line:000000161019004925000003n0
161019+
now to deal th** line:000000161019006931000003n0
161019+
now to deal th** line:000000161019007926000009y0
161019+
now to deal th** line:000000161019008150000003n0
161019+
now to merge 20161019182531.r
now to deal th** line:000000161019001925000003n0
161019+
now to deal th** line:000000161019004931000003n0
161019+
now to deal th** line:000000161018007926000009y0
now to deal th** line:000000161019007926000009y0
161019+
now to deal th** line:000000161019009150000003n0
161019+
now to deal th** line:000000161017007926000009y0
now to merge 20161019213456.r
now to deal th** line:000000161019002925000003n0
161019+
now to deal th** line:000000161019002931000003n0
161019+
now to deal th** line:000000161019002926000009y0
161019+
now to deal th** line:000000161019003150000003n0
161019+
totally 12 lines h**e merged.
end-1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666712345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667
对照被合并的文件和结果文件,一共有4个文件,但只有3个文件(20161019030254.r、20161019182531.r、20161019213456.r)满足时间条件,这3个文件中满足过滤条件(标识位为0、时间为前一天)的记录条数为12条,和脚本执行结果一致。大家也可对本脚本进行更多的测试。总结
shell脚本在基于linux的开发中有极为广泛的应用,因为它靠近底层,执行效率高、部署方便。本文中的脚本也可以作为定时任务部署到机器上,让它在每天的同一个时间里自动执行。
-
问 热血传奇中你最喜欢哪一件装备,与你发生过什么情缘故事?
提问时间:2024-05-10 09:26:05
答 最主要的就是武器了,屠龙刀,以前玩传奇就是梦寐以求的屠龙刀了,霸主的象征啊!以前玩康琦很有意思的,拿过裁决,裁决裁决裁决就可以了,屠龙刀嗯,能拿到屠龙刀那要命了...
-
问 你听说过哪些骇人听闻的真实**?
提问时间:2024-05-10 06:37:04
答 看了大家发了这么多吓人的**,作为一个游戏领域的创作者,我就给大家讲一讲游戏里真实的恐怖**,这里面每一件说出来都是骇人听闻的!21岁男子玩游戏嫌小孩吵持刀捅伤...
-
问 你身边那些大家口中的“老实人”,生活现状是怎样的?
提问时间:2024-05-10 13:28:29
答 首先说出我的答案:“老实人”绝对没有好下场~最好的结局,也就是个默默无闻,了此残生…浅析如下:社会上的资源是有限的,从某种意义上说,“过的好”的人其实就是多占有...
-
问 和同桌发生过哪些难忘的事?
提问时间:2024-05-10 14:43:37
答 和班里公认的最帅的小伙子同桌。女生宿舍卧谈会只要谈到他就自动屏蔽,滚去睡觉了。产生一种条件反射,长得帅的人都是邋遢大王。因为无数次看到他书桌里的各种过期食品,各...
-
问 你为钓鱼做过哪些疯狂的事情?
提问时间:2024-05-10 09:23:22
答 为了寻找最好的鱼饵,捅过马蜂窝,用蜂儿钓鱼,被马蜂追的跳水塘。为了钓雅鱼,裤子衣服脱光光,拿着鱼杆,把衣服裤子顶在头上,坚难的渡过急流,爬上离岸有二十米的岩石上...
-
问 有哪些真实的事件,离奇的不像是真的?
提问时间:2024-05-10 04:44:39
答 4月2日下午1点左右,在重庆某小区,一6岁小女孩不慎从26楼窗户坠下,落地后竟自己爬了起来,事发后被热心群众送到医院,女孩仅右手骨折,无生命危险。如果没有这些视...
-
问 你在户外旅行中发生过哪些有趣搞笑的事儿?
提问时间:2024-05-10 07:27:17
答 作为从初中就敢独自去森林露营、没事儿去荒野求个生的骨灰级作死户外玩家,有许多亲生经历的爆笑故事跟大家分享。1.晚上在海拔3700的山梁上用自制的柴炉烧水,我纳闷...
-
问 在现实生活中你碰到过哪些超级尴尬的事情?
提问时间:2024-05-10 17:05:24
答 首先感谢邀请要说生活中遇到哪些尴尬事,哇塞,那真是太多了!我就讲述几件经典尴尬且搞笑的事情吧。第一件尴尬的事发生在我上三四年级的时候,具体时间不记得了,确切地说...
-
问 你身边闷声发大财的人都是做什么生意的?
提问时间:2024-05-10 00:41:42
答 我回答一下吧:我有个朋友,正常人,也没感觉那里特别,跟大家一起上学打游戏想毕业后找个工作,不行辞了再找!开始我们天天在一起打游戏,那时候打魔兽3后来是守图3c等...
-
问 大家经历过哪些被你身边朋友伤害的事情?
提问时间:2024-05-10 12:16:24
答 一般肯定会说:既然是你的朋友,就没啥深仇大恨,最多就是一时赌气,想解决也容易,就是拉着她,微微一笑,说一句,好兄弟,好姐妹,别生气,但是真的伤害到自己以后才知道...