1. 程式人生 > 其它 >利用grep進行文字處理

利用grep進行文字處理

目錄

背景

需要將一份百萬的資料按照一定的規格(開頭以地市字元)進行資料拆分。

相關命令

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

終於最後成功了。