繁体   English   中英

切| 排序| Uniq -d -c | 但?

[英]Cut | Sort | Uniq -d -c | but?

给定文件采用以下格式。

GGRPW,33332211,kr,P,SUCCESS,systemrenewal,REN,RAMS,SAA,0080527763,on:X,10.0,N,20120419,migr
GBRPW,1232221,uw,P,SUCCESS,systemrenewal,REN,RAMS,ASD,20075578623,on:X,1.0,N,20120419,migr
GLSH,21122111,uw,P,SUCCESS,systemrenewal,REN,RAMS,ASA,0264993503,on:X,10.0,N,20120419,migr

我需要取出重复和计数(每个重复项分类为f1,2,5,14)。 然后使用第一个重复出现记录整个字段插入到数据库中,并在另一列中标记计数(重复)。 为此,我需要剪切所有4个提到的字段并使用uniq -d排序和查找重复,并使用-c的计数。 现在再次回归所有整理后的重复,它计数我需要输出为以下形式。

3,GLSH,21122111,uw,P,SUCCESS,systemrenewal,REN,RAMS,ASA,0264993503,on:X,10.0,N,20120419,migr

而三个是f1,2,5,14的重复重复次数,其余字段可以来自任何dup行。

通过这种方式,应该从原始文件中删除重复并以上述格式显示。 原始文件中的剩余部分将是unq,因为它是...


我所做的是......

awk '{printf("%5d,%s\n", NR,$0)}' renewstatus_2012-04-19.txt > n_renewstatus_2012-04-19.txt 
cut -d',' -f2,3,6,15 n_renewstatus_2012-04-19.txt |sort | uniq -d -c 

但是这需要再次回到原始文件以获取重复出现的行。 ..

让我不要混淆..这需要一个不同的观点..我的大脑紧紧抓住我的方法..需要一支雪茄..任何thots ......?

sort有一个选项-k

  -k, --key=POS1[,POS2] start a key at POS1, end it at POS2 (origin 1) 

uniq有一个选项-f

  -f, --skip-fields=N avoid comparing the first N fields 

所以使用字段编号排序和uniq(计数NUM并自己测试此cmd,plz)

awk -F"," '{print $0,$1,$2,...}' file.txt | sort -k NUM,NUM2 | uniq -f NUM3 -c

使用awk的关联数组是查找唯一/重复行的便捷方法:

awk '
    BEGIN {FS = OFS = ","}
    {
        key = $1 FS $2 FS $5 FS $14
        if (key in count) 
            count[key]++
        else {
            count[key] = 1
            line[key] = $0
        }
    }
    END {for (key in count) print count[key], line[key]}
' filename

句法 :

awk -F,'!(($ 1 SUBSEP $ 2 SUBSEP $ 5 SUBSEP $ 14)uniq){uniq [$ 1,$ 2,$ 5,$ 14] = $ 0} {count [$ 1,$ 2,$ 5,$ 14] ++} END {for (我在计数中){if(count [i]> 1)file =“dupes”; else file =“uniq”; print uniq [i],“,”count [i]> file}}'renewstatus_2012-04- 19.txt

计算:

sym @ localhost:〜$ cut -f16 -d','uniq | 排序| uniq -d -c 124275 1 -----> UNIQ的总和(1)ENTRIES

sym @ localhost:〜$ cut -f16 -d','dupes | 排序| uniq -d -c 3860 2 850 3 71 4 7 5 3 6 sym @ localhost:〜$ cut -f16 -d','dupes | 排序| uniq -u -c

1 7

10614 ------>与其数量相乘的重复条目的总和

sym @ localhost:〜$ wc -l renewstatus_2012-04-19.txt 134889 renewstatus_2012-04-19.txt --->原始文件的总行数,与(124275 + 10614)= 134889完全匹配

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM