背景
需要将一份百万的数据按照一定的规格(开头以地市字符)进行数据拆分。
相关命令
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
终于最后成功了。