利用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

终于最后成功了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值