特定の列から重複項目を削除する

特定の列から重複項目を削除する

列がコンマで区切られた次の形式のファイルがあります。

[1], Value1,   UAC,                 AB
[2.2], Check1, BOH D2A D2A BOH,     SD
[63], name2,   MFB MFB,              k
...

次のように、列(3番目の列など)から重複値を削除したいと思います。

[1], Value1,   UAC,             AB
[2.2], Check1, BOH D2A ,        SD
[63], name2,   MFB,              k
...

特定の列を使用uniqまたはターゲティングする方法AWK

ベストアンサー1

そしてawk

awk -F, '{
    printf $1 FS $2 FS; 
    split($3, arr, / +/); for(val in arr) !uniq_arr[ arr[val] ]++;
    for (key in uniq_arr) { 
        printf (key!="")? SPACE key:""; SPACE=" "; delete uniq_arr[key]
    };
    printf FS $4"\n"
}' infile

[1], Value1, UAC, AB
[2.2], Check1, D2A BOH, SD
[63], name2, MFB, k
  • これにより、列3はスペース区切り記号に基づいて配列にsplit($3, arr, / +/)分割されますarr(区切り記号として1つ以上のスペースがある可能性があります)。

  • では、for(val in arr) !uniq_arr[ arr[val] ]++配列から取得した重複値を削除して新しい配列を作成するため、arr配列の最終値はuniq_arr各列の固有値3です。

  • 次に保存した値を印刷し、uniq_arr印刷後にキーを削除します。列#1、#2、#4の値は個別に印刷されます。

また見なさい:

おすすめ記事