利用grep進行文字處理
阿新 • • 發佈:2022-04-15
目錄
背景
需要將一份百萬的資料按照一定的規格(開頭以地市字元)進行資料拆分。
相關命令
grep
wc
思路
根據grep的正則匹配出以hz、nb開頭的資料
過程
1.首先用grep過濾出資料
grep '^hu' aaa.txt >hu.txt grep '^hz' aaa.txt >hz.txt grep '^jh' aaa.txt >jh.txt grep '^jx' aaa.txt >jx.txt grep '^ls' aaa.txt >ls.txt grep '^nb' aaa.txt >nb.txt grep '^qz' aaa.txt >qz.txt grep '^sx' aaa.txt >sx.txt grep '^tz' aaa.txt >tz.txt grep '^wz' aaa.txt >wz.txt grep '^zs' aaa.txt >zs.txt
2.拆完了肯定是要匹配下資料量是否能對
利用wc獲取檔案行數,然後用excel合併對比下
wc -l *
3.發現數據對應不上
完了bbq了,發現數據量對應不上,只能想法子把差異的資料取出來
發現grep 支援[^] 取其他字元,說幹就幹,然後使用以下語法
grep '^[^ls]' aaa.txt |grep '^[^nb]'|grep '^[^qz]'|grep '^[^sx]'|grep '^[^hu]' |grep '^[^tz]'|grep '^[^hz]'|grep '^[^wz]'|grep '^[^jh]' |grep '^[^zs]'|grep '^[^jx]' > cy.txt
發現取出來的cy還是存在差異,於是手動處理髮現
grep '^[^ls]'
這個語句會把l或者s開頭的全部過濾掉,發現
[^ls]
不是支援字串的而是取非括號裡面所有的字元,因此正確的操作是用grep的取反-v操作
grep -v ^ls aaa.txt |grep -v ^nb|grep -v ^qz|grep -v ^sx|grep -v ^hu |grep -v ^tz|grep -v ^hz|grep -v ^wz|grep -v ^jh |grep -v ^zs|grep -v ^jx > realreallast.txt
終於最後成功了。