工作日常觅捆,需要查數(shù)據(jù)庫赦役,或者load日志。篩出符合一定業(yè)務邏輯的數(shù)據(jù)栅炒。
然后整理成一定格式的文件扩劝,有時基礎數(shù)據(jù)不全,還要在曬出的數(shù)據(jù)文件基礎上职辅,做些邏輯判斷棒呛,添加一些數(shù)據(jù)。
比如域携,線上業(yè)務充值贈送禮品簇秒。不同的充值額度,贈送的禮品數(shù)不同秀鞭。
原始文件
"11111","5"
"22222","10"
"33333","15"
"44444","20"
"55555","25"
"66666","30"
其中第一列是用戶id趋观,第二列是充值金額
目標文件是
11111,5,100
22222,10,100
33333,15,200
44444,20,200
55555,25,300
66666,30,300
想判斷第二列的值,1-10贈100锋边,11-20贈200皱坛,21-30贈300。第三列是贈送的禮品數(shù)豆巨。
分兩步剩辟,先預處理下文件。第二列是字符串往扔,沒法比較大小贩猎,先去掉“”。這個場景比較適合用sed指令工具處理萍膛。
cat file.txt |sed 's/"http://g'
's/要替換的字符/替換后的字符/g'
s替換吭服,g全部替換。
然后用awk處理蝗罗,使用if表達式
cat temp |awk -F ',' '{if ($2>=1&& $2<10) print $1","$2","100; else if ($2>=10&& $2<20) print $1"," $2","200; else if ($2>=20&& $2<=30) print $1","$2","300}'
或者
cat temp |awk -F ',' '{if ($2>=1&& $2<10) {print $1","$2","100} else if ($2>=10&& $2<20) {print $1"," $2","200} else if ($2>=20&& $2<=30) {print $1","$2","300}}'
語法:
awk -F ',' '{if(條件){執(zhí)行表達式}
else if(條件){執(zhí)行表達式}
else{執(zhí)行表達式}}'
或者執(zhí)行表達式不加大括號艇棕,條件之間用;分割串塑。
有一點調(diào)試一會沼琉,就是shell腳本里條件里邊不支持
10>a>5表達,要分開拟赊。刺桃。
a>5&&a<10
發(fā)現(xiàn)java語法也不支持勋磕,我這是在哪看到了這樣的寫法昂灵。。
sed是流編輯器仔雷,是逐行取出文本內(nèi)容然后再進行處理屋匕。既然是編輯器那sed在編輯文件方面就具有很多優(yōu)勢葛碧,比如插入新行,修改某行过吻,根據(jù)正則匹配某行同時修改进泼。跟我們平時使用的交互式文本編輯器差不多,但是sed可以提前做好劇本纤虽,然后無需中斷無需交互就能達到最終想要的結(jié)果乳绕。
而awk是報表生成工具,也是逐行取出文件逼纸,但是取出來的目的是把內(nèi)容進行二次加工洋措,然后把有用的數(shù)據(jù)單獨用優(yōu)雅的格式輸出,或者進行歸納統(tǒng)計得到統(tǒng)計結(jié)果杰刽,等等菠发。