最近做一个基于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": "部分重复"},