複数の動的列に基づいて重複を削除する方法

複数の動的列に基づいて重複を削除する方法

bash(awk)を使用して、複数の列に基づいてパイプで区切られたファイルから重複エントリを削除できますが、列を入力パラメータとして渡す方法は?私のファイルには次のデータがあります

Insert|val1|val2|val3|val4 
Insert|val1a|val2|val3a|val4

入力パラメータに基づいて重複を削除したいです。場合によっては、位置1と位置3を使用して行を削除し、時には位置2と位置3を使用して行を削除したい場合があります。私はこれを使用しています

 awk -F, '!seen[$1,$3 ]++ '

しかし、$ 1、$ 2をパラメータ化する方法がわかりません。

ベストアンサー1

これはおそらくあなたが望むものです:

$ awk -v c='1 3' -F'|' 'BEGIN{split(c,k," ")} {key=""; for (i in k) key=key FS $(k[i])} !seen[key]++' file
Insert|val1|val2|val3|val4

おすすめ記事