对于Unix的基本命令,想必大家定都不会陌生,因为我们日常工作中都会使用到。这里笔者就不再累述了,只是浅谈一下Unix组合命令的妙用。
事件回放:去年业务部门曾提出了一个临时统计需求,大致内容是:根据所提供的号码清单文件,汇总出每个省份对应的手机号码个数。清单文件为文本文件,为了查看直观,将扩展名改为.csv,容量大约有75M,清单文件共有两列,第一列对应省份,第二列对应手机号码。部分内容如下:
贵州,13508524394
宁夏,13995117825
北京,13810451934
湖南,13511116394
北京,13810272429
湖北,13407180229
黑龙江,13503607235
北京,13810347938
北京,13401023582
福建,13400502160
甘肃,13519012419
北京,13810457460
北京,13810404861
河北,13400105932
北京,13401033000
北京,13401033000
江苏,13400027774
江苏,13400027774
江苏,13402634765
湖南,13467323605
四川,13518115628
河北,13400129046
。。。
解决方案:采用Unix的组合命令,非常容易统计出结果。以下是笔者在10.2.2.97上测试运行的过程,仅供参考:
[service@aspire-devsvr97:/tmp/zzg]$cat 1.csv | awk -F',' '{ print $1}' |sort | uniq -c >> sum_mobile_pickup.log
[service@aspire-devsvr97:/tmp/zzg]$more sum_mobile_pickup.log
36708 上海
76318 云南
8177 内蒙古
913152 北京
106512 吉林
75132 四川
54419 天津
15849 宁夏
17343 安徽
28347 山东
112734 山西
750573 广东
8599 广西
117380 新疆
1353 未知省
373835 江苏
110499 江西
157631 河北
39734 河南
114936 浙江
3203 海南
122450 湖北
78046 湖南
101102 甘肃
177323 福建
1946 西藏
113077 贵州
87951 辽宁
72045 重庆
156811 陕西
1462 青海
89902 黑龙江
命令简述:
cat:查看特定文件的内容
|:管道是一个操作符,它把输入和输出重定向结合在一起,从而将一个命令的输出立即作为另一个命令的输入。
Awk:将数据文件中的记录行与提供的模式相匹配。如果没有提供模式,awk将匹配所有行。
‘,’:对于.csv文件格式,用符号,分割;对于.txt文件格式,用符号’/t’分割。
$1:变量$1包含从记录项的开头一直到第一个分隔符为止的文本。
sort:以特定的次序对命令或文件的输出进行排序。
uniq:去重,对于那些连续重复的行只显示一次。
命令最终运行效果图如下所示: