Chinaunix
标题:
如何对身份证号码进行排序,按照年月大小排序。
[打印本页]
作者:
LikeLx
时间:
2013-10-23 09:00
标题:
如何对身份证号码进行排序,按照年月大小排序。
本帖最后由 LikeLx 于 2013-10-23 09:23 编辑
对身份证号码进行排序,按照年月大小排序。(按照标红部分排序)
232332
19851016
0913
232332
19900713
0125
340403
19820811
1312
350783
19860519
3316
370683
19840308
4132
500234
19850121
6453
622421
19830905
2213
作者:
LikeLx
时间:
2013-10-23 09:03
本帖最后由 LikeLx 于 2013-10-23 09:24 编辑
试了好几个方法不对,求大神指教下!
作者:
yestreenstars
时间:
2013-10-23 09:31
[root@localhost ~]# cat i
232332198510160913
232332199007130125
340403198208111312
350783198605193316
370683198403084132
500234198501216453
622421198309052213
[root@localhost ~]# sort -nk1.7,1.14 i
340403198208111312
622421198309052213
370683198403084132
500234198501216453
232332198510160913
350783198605193316
232332199007130125
[root@localhost ~]#
复制代码
作者:
LikeLx
时间:
2013-10-23 09:34
回复
3#
yestreenstars
多谢,请问用awk可以弄出来吗?
作者:
reyleon
时间:
2013-10-23 09:45
回复
4#
LikeLx
awk '{a[substr($0,7,8)]=$0}END{for(i=1;i<=asorti(a,b);i++)print a[b[i]]}'
复制代码
作者:
yestreenstars
时间:
2013-10-23 09:47
本帖最后由 yestreenstars 于 2013-10-23 09:48 编辑
[root@localhost ~]# cat i
232332198510160913
232332199007130125
340403198208111312
350783198605193316
370683198403084132
500234198501216453
622421198309052213
[root@localhost ~]# awk '{a[substr($0,7,8)]=$0}END{for(i=1;i<=asorti(a,b);i++)print a[b[i]]}' i
340403198208111312
622421198309052213
370683198403084132
500234198501216453
232332198510160913
350783198605193316
232332199007130125
[root@localhost ~]#
复制代码
作者:
LikeLx
时间:
2013-10-23 09:50
回复
5#
reyleon
多谢
作者:
LikeLx
时间:
2013-10-23 09:50
回复
6#
yestreenstars
多谢
作者:
LikeLx
时间:
2013-10-23 11:21
awk '{a[substr($0,7,
]=$0;c[substr($0,7,4)]++}END{for(i=1;i<=asorti(a,b);i++) print a[b[i]];for(i in c) print i,c[i]|"sort -n"}' 多谢各位的帮助,自己又添了点东西
作者:
davidbeckham921
时间:
2013-10-23 15:43
本帖最后由 davidbeckham921 于 2013-10-23 15:48 编辑
楼上几位的方法很好,但是如果有年与日相等的情况肿么办呢?数组是不是就。。。了
232332198510160913
333333198510160913
232332199007130125
340403198208111312
350783198605193316
370683198403084132
500234198501216453
622421198309052213
好像还是用sort好些
sort -nk1.7,1.14 i|wc -l
8
gawk '{a[substr($0,7,
]=$0}END{for(i=1;i<=asorti(a,b);i++)print a[b
]}' i|wc -l
7
作者:
LikeLx
时间:
2013-10-23 16:03
回复
10#
davidbeckham921
那就把后四位再带上,确保不会重复。
作者:
davidbeckham921
时间:
2013-10-23 16:42
LikeLx 发表于 2013-10-23 16:03
回复 10# davidbeckham921
那就把后四位再带上,确保不会重复。
不知道有特殊字符,比如x的会咋样。后四位也不能完全保证一致吧。搞个二维数组应该可以搞定。前面是a[$0],后面搞个a[$0]++。感觉应该还是sort专业
作者:
seesea2517
时间:
2013-10-24 09:40
回复
12#
davidbeckham921
或者这样,把身份证的前七位移到最后去,这样所有的身份证号码没改变,只是变了一下顺序,变成了年月日在最前面了,以最高的优先级排列了。
作者:
423497786
时间:
2014-01-13 17:37
awk '{print substr($0,7,
|"sort"}' 1.txt
欢迎光临 Chinaunix (http://bbs.chinaunix.net/)
Powered by Discuz! X3.2