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