- 论坛徽章:
- 0
|
请问怎么分类以下字段
原帖由 "jackieyuan" 发表:
我觉得在喂它之前就排好序列比较好。而且可能要用-n (以数字形式)。
你没明白我的意思.我指的是AWK输出数组时的排序.喂它这前排序不能解决问题,一用for输出就乱了.
我刚才又仔细看了一下你这个文本,很奇怪,你说"逗号后面的数字是user的某个记数",既然是记数了,应该在一个日期下每个USER只有一个记录,可能不用统计,可我不知道你的真正需求,就把你的原文本(看这个应该不用再统计了直接输出就行)的行数复制了一次(行数加了一倍,一个日期下出现重复用户记录,肯定要统计了),分别测试了一下,没用数组,这样反而避免了数组输出时乱序,一次sort加一次awk就可以:
原文本(31行)的测试:
44P.midtst:/midtst/tmp > sort -k3,3r -k6,6 bb | awk '{if(sDate!=substr($0,1,15)){print substr($0,1,15);sDate=substr($0,1,15)};print $6,$5}'
2004 May 23 Sun
user1 3
user3 1
user4 8
user5 1
user8 7
2004 May 22 Sat
user1 3
user4 10
user5 3
2004 May 21 Fri
user1 10
user2 2
user3 6
user4 15
user5 1
user6 1
2004 May 20 Thu
user1 4
user2 1
user3 2
user4 20
2004 May 19 Wed
user1 5
user3 4
user4 21
user7 4
2004 May 18 Tue
user1 10
user2 4
user3 8
user5 2
user7 1
2004 May 17 Mon
user1 8
user2 2
user3 2
user5 1
44P.midtst:/midtst/tmp >
结果同ADMIRER的一致,同时用户名也排序了.而且因为没考虑统计,代码短了
有重复记录文本(62行)的测试:
44P.midtst:/midtst/tmp > sort -k3,3r -k6,6 b | awk '{if(sDate!=substr($0,1,15)){if(NR!=1){print sUser,iCnt;}print substr($0,1,15);sDate=substr($0,1,15);iCnt=$5;sUser=$6;}else{if(sUser!=$6){print sUser,iCnt;iCnt=$5;sUser=$6}else iCnt+=$5};};END{print sUser,iCnt}'
2004 May 23 Sun
user1 6
user3 2
user4 16
user5 2
user8 14
2004 May 22 Sat
user1 6
user4 20
user5 6
2004 May 21 Fri
user1 20
user2 4
user3 12
user4 30
user5 2
user6 2
2004 May 20 Thu
user1 8
user2 2
user3 4
user4 40
2004 May 19 Wed
user1 10
user3 8
user4 42
user7 8
2004 May 18 Tue
user1 20
user2 8
user3 16
user5 4
user7 2
2004 May 17 Mon
user1 16
user2 4
user3 4
user5 2
44P.midtst:/midtst/tmp >
每行统计数结果是原文本的二倍
我上面的脚本是为了好抓屏运行时从VIM里把写好的脚本合成一行后抓到命令行的,贴上脚本:
- #### 原文本 ####
- sort -k3,3r -k6,6 b | awk '{
- if(sDate!=substr($0,1,15))
- {
- print substr($0,1,15);
- sDate=substr($0,1,15);
- }
- print $6,$5;
- }'
- #### 新文本 ####
- sort -k3,3r -k6,6 b | awk '{
- if(sDate!=substr($0,1,15))
- {
- if(NR!=1)
- {
- print sUser,iCnt;
- }
- print substr($0,1,15);
- sDate=substr($0,1,15);
- iCnt=$5;sUser=$6;
- }
- else
- {
- if(sUser!=$6)
- {
- print sUser,iCnt;
- iCnt=$5;sUser=$6;
- }
- else iCnt+=$5;
- };
- };
- END{print sUser,iCnt}'
复制代码
为什么发帖时CODE中不能嵌COLOR! 高手赐教! |
|