Это печатает дубликаты строк на основе совпадающих полей. Он использует ассоциативный массив, который может увеличиваться в зависимости от характера вашего входного файла. Вывод не сортируется, поэтому большинство дубликатов не группируются вместе (кроме первых двух из набора).
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