背景描述
前段時(shí)間,接到一個(gè)小需求:給你少量商家的手機(jī)號(hào),要查出系統(tǒng)對(duì)應(yīng)用戶id。
這種需求其實(shí)很簡(jiǎn)單,有現(xiàn)成的resetful接口,直接請(qǐng)求返回結(jié)果,解析其中的id信息拿出來就好了。
但是處理起來比較尷尬,專門寫個(gè)腳本有點(diǎn)殺雞用牛刀的感覺,無奈找不到更好的方案,只能先寫個(gè)腳本把需求解決了先。
更優(yōu)雅的方法
周末有時(shí)間,又想起這事情來,這種需求查詢量不大,功能也簡(jiǎn)單,其實(shí)完全可以用一條命令就能解決的。而且之前剛剛看了xargv和sed的基礎(chǔ)用法,處理起來應(yīng)該綽綽有余。
需求重現(xiàn)
給你一批手機(jī),調(diào)用淘寶的接口
http://tcc.taobao.com/cc/json/mobile_tel_segment.htm?tel=15850781443
查詢這批手機(jī)號(hào)的地區(qū)id。
準(zhǔn)備數(shù)據(jù)
先從網(wǎng)上隨便找20個(gè)手機(jī)號(hào)當(dāng)輸入源
18920211520
13819920502
18070062222
17674077773
17612951295
13631333353
18015028188
13500035477
13762925555
18661778179
18661778177
18866001177
18866001177
18571871877
18903717108
17768699777
15874611777
14576399999
15565556566
18888688888
將這些保存到inputSource文件里。
用xargv拼接請(qǐng)求
cat inputSource | xargs -I {} curl 'http://tcc.taobao.com/cc/json/mobile_tel_segment.htm?tel={}'
過濾curl的結(jié)果
cat inputSource | xargs -I {} curl 'http://tcc.taobao.com/cc/json/mobile_tel_segment.htm?tel={}' | grep areaVid
這時(shí)卻發(fā)現(xiàn)出現(xiàn)了我們不需要的輸出
######################################################################## 100.0%
網(wǎng)上google一下,發(fā)現(xiàn)可以用--silent參數(shù),于是得到
cat inputSource | xargs -I {} curl --silent 'http://tcc.taobao.com/cc/json/mobile_tel_segment.htm?tel={}' | grep areaVid
用awk處理字符
先用awk試個(gè)手
cat inputSource | xargs -I {} curl --silent 'http://tcc.taobao.com/cc/json/mobile_tel_segment.htm?tel={}' | grep areaVid | awk '{print $1}'
把前面的tab符去掉了。
再把單引號(hào)作為字符分隔符來處理:
cat inputSource | xargs -I {} curl --silent 'http://tcc.taobao.com/cc/json/mobile_tel_segment.htm?tel={}' | grep areaVid | awk 'BEGIN{FS="'"} {print $2}'
不成功,提示等待輸入結(jié)束的單引號(hào),是引入了'的緣故。
既然'有問題,先退一步,換個(gè)字符試試分隔符用的對(duì)不對(duì)。
cat inputSource | xargs -I {} curl --silent 'http://tcc.taobao.com/cc/json/mobile_tel_segment.htm?tel={}' | grep areaVid | awk 'BEGIN{FS=":"} {print $2}'
用:沒問題,離成功又近了一步。再去google一下,怎么指定單引號(hào)為分隔符。發(fā)現(xiàn)是\047,于是得到最后的命令
cat inputSource | xargs -I {} curl --silent 'http://tcc.taobao.com/cc/json/mobile_tel_segment.htm?tel={}' | grep areaVid | awk 'BEGIN{FS="\047"} {print $2}'
參考資料
xargs命令
How to grep the output of cURL?
AWK 簡(jiǎn)明教程
awk用法小結(jié)