éæ±æè¿°
ç°æå¤ä¸ªå
·æç¸åå½åæ ¼å¼åå
å®¹æ ¼å¼çæ件ï¼è¦æ±ç¼åshellèæ¬å°å®ä»¬å并å°ä¸ä¸ªæ件ä¸ã
被å并æ件çå½åæ ¼å¼ä¸ºï¼YYYYMMDDHHMISS.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 existed!!"
return_fail
fi
if [ ! -d ${exportpath}]; then
echo "[error]:${exportpath} has not existed!!"
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 existed!! now backup it to${YES_FILENAME}_bak."
mv ${YES_FILENAME}${YES_FILENAME}_bak
fi
cd ${srcparh}
file_list_temp=`ls | grep-E "${ONE_DAY_AGO}"`
file_list_count=`ls |grep -E "${ONE_DAY_AGO}" | wc -l`
echo " "
echo "there are${file_list_count} yesterday file(s) to be merged."
echo " "
>${exportpath}/${YES_FILENAME}
for file_name in$file_list_temp
do
echo "now to merge ${file_name}"
cat ${file_name} | grep "^0" >${file_name}_filter_firstline
while read line
do
echo ""
echo "nowto deal this 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 havemerged."
fi
if [ ! -s${exportpath}/${YES_FILENAME} ]
then
echo "warn:there is no yesterday file record!!,${exportpath}/${YES_FILENAME} isblank!"
echo " ">${exportpath}/${YES_FILENAME}
fi
}
main()
{
echo " "
echo "this 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
this merge tool begins running --------------------
[error]: /home/zhou/src has not existed!!12341234
第äºï¼å½exportpathæ表示çè·¯å¾ä¸åå¨æ¶ï¼æ§è¡ç»æå¦ä¸ï¼
> ./file_merge_tool.sh
this merge tool begins running --------------------
[error]: /home/zhou/export has not existed!!12341234
第ä¸ï¼å½srcparhæ表示çè·¯å¾åå¨ä½ä¸å
å«ä»»ä½æ件æ¶ï¼æ§è¡ç»æå¦ä¸ï¼
> ./file_merge_tool.sh
this 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 is no yesterday filerecord!!,/home/zhou/export/20161019.txt is blank!
-------------end ---------------------1234567891012345678910
第åï¼ç°æå个æ件20161018030205.rã20161019030254.rã20161019182531.rã20161019213456.rï¼æ¯ä¸ªæ件çå
容å¦ä¸ï¼
20161018030205.ræ件ï¼
000000161019002925000003N0
000000161019002931000003N0
300000161018002931000003N0
000000161019002926000009Y0
000000161019003150000003N0
20161019030254.ræ件ï¼
000000161019004925000003N0
000000161019006931000003N0
100000161019006971000004N0
000000161019007926000009Y0
200000161019006871000004N0
000000161019008150000003N0
20161019182531.ræ件ï¼
000000161019001925000003N0
000000161019004931000003N0
000000161018007926000009Y0
000000161019007926000009Y0
000000161019009150000003N0
000000161017007926000009Y0
600000161019007426000009Y0
20161019213456.ræ件ï¼
000000161019002925000003N0
000000161019002931000003N0
000000161019002926000009Y0
800000161019002961000003N0
000000161019003150000003N0
å°å®ä»¬ä¸ä¼ å°srcparhç®å½ä¸ï¼è¿è¡èæ¬ï¼ç»æå¦ä¸ï¼
> ./file_merge_tool.sh
this 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 this line: 000000161019004925000003N0
+161019+
now to deal this line: 000000161019006931000003N0
+161019+
now to deal this line: 000000161019007926000009Y0
+161019+
now to deal this line: 000000161019008150000003N0
+161019+
now to merge 20161019182531.r
now to deal this line: 000000161019001925000003N0
+161019+
now to deal this line: 000000161019004931000003N0
+161019+
now to deal this line: 000000161018007926000009Y0
now to deal this line: 000000161019007926000009Y0
+161019+
now to deal this line: 000000161019009150000003N0
+161019+
now to deal this line: 000000161017007926000009Y0
now to merge 20161019213456.r
now to deal this line: 000000161019002925000003N0
+161019+
now to deal this line: 000000161019002931000003N0
+161019+
now to deal this line: 000000161019002926000009Y0
+161019+
now to deal this line: 000000161019003150000003N0
+161019+
Totally 12 lines have merged.
-------------end ---------------------1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666712345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667
对ç
§è¢«å并çæ件åç»ææ件ï¼ä¸å
±æ4个æ件ï¼ä½åªæ3个æ件(20161019030254.rã20161019182531.rã20161019213456.r)满足æ¶é´æ¡ä»¶ï¼è¿3个æ件ä¸æ»¡è¶³è¿æ»¤æ¡ä»¶(æ è¯ä½ä¸º0ãæ¶é´ä¸ºåä¸å¤©)çè®°å½æ¡æ°ä¸º12æ¡ï¼åèæ¬æ§è¡ç»æä¸è´ã
大家ä¹å¯å¯¹æ¬èæ¬è¿è¡æ´å¤çæµè¯ã
æ»ç»
shellèæ¬å¨åºäºLinuxçå¼åä¸ææ为广æ³çåºç¨ï¼å 为å®é è¿åºå±ï¼æ§è¡æçé«ãé¨ç½²æ¹ä¾¿ãæ¬æä¸çèæ¬ä¹å¯ä»¥ä½ä¸ºå®æ¶ä»»å¡é¨ç½²å°æºå¨ä¸ï¼è®©å®å¨æ¯å¤©çåä¸ä¸ªæ¶é´éèªå¨æ§è¡ã
温馨提示:答案为网友推荐,仅供参考