美文网首页
大文件内容使用shell 排序、去重

大文件内容使用shell 排序、去重

作者: 三十一_iOS | 来源:发表于2017-03-25 10:48 被阅读344次

最近做一个基于iOS 10 来电拦截的东西,需要向系统中添加数据,数据要求必须排序,且不能有重复的号码。
刚开始试了用oc 写了个排序去重的算法,麻蛋开着电脑吃完饭回来还没有跑完,就去网上搜了下shell ,搞起来那叫一个酸爽。有了下面3行命令,速度杠杠的,三十几M的东西,几秒钟搞定。

sort -u simple.json         
删除完全相同的行 并排序 

例:


111111  222

222222  222

3333333 222

4444444 222

222222  222

=> sort -u simple02.json  

111111  222
222222  222
3333333 222
4444444 222



awk '!a[$1]++' simple.json   

删除指定区域相同内容的行,$1 代表第1列

例:

111111  123
222222  456
3333333 789
4444444 123
222222  345

=> awk '!a[$1]++' simple02.json
111111  123
222222  456
3333333 789
4444444 123
sort -n -k 2 -t '"' simple.json

根据指定分隔符分割后对指定区域进行排序


例如
 {"861004": "广告推销"},
 {"861100": "诈骗电话"},
 {"861101": "骚扰电话"},
 {"861314": "骚扰电话"},
 {"861300": "诈骗电话"},
 {"861110": "骚扰电话"},
 {"861301": "骚扰电话"},
 {"861322": "诈骗电话"},
 {"861111": "骚扰电话"},
 {"861212": "骚扰电话"},
 {"861110": "部分重复"},
 {"861322": "部分重复"},

=>awk '!a[$1]++' simple02.json
// 除去重复的手机号 {"861110": "部分重复"}, {"861322": "部分重复"},被除去 

 {"861004": "广告推销"},
 {"861100": "诈骗电话"},
 {"861101": "骚扰电话"},
 {"861314": "骚扰电话"},
 {"861300": "诈骗电话"},
 {"861110": "骚扰电话"},
 {"861301": "骚扰电话"},
 {"861322": "诈骗电话"},
 {"861111": "骚扰电话"},
 {"861212": "骚扰电话"},
=>sort -n -k 2 -t '"' simple02.json
//-t '"' 表示 根据" 进行分割
//-k 2 表示分割后的第2个选项   {"861004": "广告推销"},根据 " 分割后,第一个选项是{ 第2个选项为861004
//整体的意思就是 根据 " 分割后的第2个选项进行排序。

 {"861004": "广告推销"},
 {"861100": "诈骗电话"},
 {"861101": "骚扰电话"},
 {"861110": "部分重复"},
 {"861110": "骚扰电话"},
 {"861111": "骚扰电话"},
 {"861212": "骚扰电话"},
 {"861300": "诈骗电话"},
 {"861301": "骚扰电话"},
 {"861314": "骚扰电话"},
 {"861322": "诈骗电话"},
 {"861322": "部分重复"},

相关文章

网友评论

      本文标题:大文件内容使用shell 排序、去重

      本文链接:https://www.haomeiwen.com/subject/tctcottx.html