3

与えられたファイルは以下の形式です。

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を使用してdupをソートして見つける必要があり、カウントには-cを使用しました。重複をすべて整理した後、再び戻ってくると、出力が次の形式になる必要があります。

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

一方、3 は f1、2、5、14 の繰り返し複製の数であり、残りのフィールドは任意の複製行から取得できます。

このようにして、複製は元のファイルから削除され、上記の形式で表示されます。そして、元のファイルに残っているものは、そのまま行く一意のものになります...


私がやったことは..

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 

ただし、これには、重複が発生した行を取得するために、元のファイルに戻るポイントが必要です。..

混乱させないでください..これには別の視点が必要です..そして私の脳は私のアプローチにしがみついています..葉巻が必要です..

4

3 に答える 3

4

並べ替えにはオプション -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
于 2012-04-21T11:38:25.500 に答える
0

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
于 2012-04-21T18:21:59.257 に答える
0

構文:

awk -F、'!(($ 1 SUBSEP $ 2 SUBSEP $ 5 SUBSEP $ 14)in uniq){uniq [$ 1、$ 2、$ 5、$ 14] = $ 0} {count [$ 1、$ 2、$ 5、$ 14] ++} END {for (i in count){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)エントリの合計

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

于 2012-08-21T10:07:24.867 に答える