これにより、一致するフィールドに基づいて重複した行が出力されます。入力ファイルの性質に応じて大きくなる可能性のある連想配列を使用します。出力はソートされないため、ほとんどの重複はグループ化されません (セットの最初の 2 つを除く)。
awk -F'|' '{ idx=$1$2$3$12$13; if (array[idx] == 1) {print} else if (array[idx]) {print array[idx]; print; array[idx]=1} else {array[idx]=$0}}' inputfile.txt
おそらく、次のようなラッパースクリプトのシェル変数でインデックスリストを作成できます。
#!/bin/ksh
for arg
do
case arg in # validate input (could be better)
+([0-9]) ) # integers only
idx="$idx'$'$arg"
;;
* )
echo "Invalid field specifier"
exit
;;
esac
done
awk -F'|' '{ idx='$idx'; if (array ...
次のようなコマンドを使用して出力をパイプすることにより、出力を並べ替えることができます。
awk ... | sort --field-separator='|' --key=1,1 --key=2,2 --key=3,3 --key=12,12 --key=13,13