csvファイルの特定の列にパイプで区切られた重複値があることを確認してください。

csvファイルの特定の列にパイプで区切られた重複値があることを確認してください。

こんにちは。パイプで区切られた100,000を超えるデータを含むCSVファイルがあります。

2|dfdf|er34Sr|afe|&*&|djhgjdsf|jhfgdhj12|dse|dsR|fcdf|erer|ddff|vcdf||||||
3||||dfrg||DFgfg||FDGRFG|FGB|FG|4546|@#$|FGFDG|DGFDFG|||FGfg||DGF |||GF |||
dhgfyukdsf|dfdf|#%||fghfhj|nvcbd,|bhd|cmnbch|vjh|jhfur||mhvjh|mnbvm||||
hjgg|||||gy|fdf|D|||fgfg|gfgf|Fgfg|FGfg|Sf||dfdfbhj|segrhb|zaefef|||
2|dfdf|er34Sr|afe|&*&|djhgjdsf|jhfgdhj12|dse|dsR|fcdf|erer|ddff|vcdf||||||
2|dfdf|er34Sr|afe|&*&|djhgjdsf|jhfgdhj12|dse|dsR|fcdf|erer|ddff|vcdf||||||
2|dfdf|er34Sr|afe|&*&|djhgjdsf|jhfgdhj12|dse|dsR|fcdf|erer|ddff|vcdf||||||
3||||dfrg||DFgfg||FDGRFG|FGB|FG|4546|@#$|FGFDG|DGFDFG|||FGfg||DGF |||GF |||
3||||dfrg||DFgfg||FDGRFG|FGB|FG|4546|@#$|FGFDG|DGFDFG|||FGfg||DGF |||GF |||
3||||dfrg||DFgfg||FDGRFG|FGB|FG|4546|@#$|FGFDG|DGFDFG|||FGfg||DGF |||GF |||

スクリプトを実行するたびに、特定の列のデータが重複していることを確認したいと思います。

たとえば、すべてのCSVファイルの列1、7、12、14に同じデータが含まれていることを確認し、その場合はその重複項目のみを表示したいと思います。

頑張りました

awk -F"|" '{
if (x[$'"$ColumnNo1"'$'"$ColumnNo2"'$'"$ColumnNo3"'$'"ColumnNo4"'])
{x_Count[$'"$ColumnNo1"'$'"$ColumnNo2"'$'"$ColumnNo3"'$'"ColumnNo4"']++;
print $0;
if(x_Count[$'"$ColumnNo1"'$'"$ColumnNo2"'$'"$ColumnNo3"'$'"ColumnNo4"']==1)
{
print x[$'"$ColumnNo1"'$'"$ColumnNo2"'$'"$ColumnNo3"'$'"ColumnNo4"']}}
x[$'"$ColumnNo1"'$'"$ColumnNo2"'$'"$ColumnNo3"'$'"ColumnNo4"']=$0}' csvfilename.csv

しかし、何の出力も得られません。

$ColumnNo1,$ColumnNo2,$ColumnNo3シェルスクリプト変数です

助けてください:)

ベストアンサー1

使用できる特別なツールがほとんどないことを除いてデータセット(例えばCSVツール)

awk -F"|" '
    {
        r = $w SUBSEP $x SUBSEP $y SUBSEP $z #prepare index from 4 fields data
    }
    R[r]{                                    #if index present in array already
        if ( R[r] != 1){                     #if it is a first repetition
            print R[r]                       #print line stored in array
            R[r] = 1                         #mark element «not a first time»
        }
        print                                #print present line
        next                                 #pass rest of code(goto next line)
    }
    {
        R[r] = $0                            #store line in array (first time only)
    }
    ' w=$ColumnNo1 x=$ColumnNo2 y=$ColumnNo3 z=$ColumnNo4 file.csv

おすすめ記事