列がコンマで区切られた次の形式のファイルがあります。
[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の値は個別に印刷されます。
また見なさい: