Поскольку вы пометили вопрос с помощью awk, я думаю, вы знакомы с ним на каком-то уровне, например, вы знаете, что вы можете установить разделитель полей для набора символов в командной строке (и в других местах), например -F '[?&] '.
Кроме того, вы можете знать, что переменная NF содержит количество полей, проанализированных в текущей входной записи (строке), и вы можете выполнить цикл от 2 до NF в стиле C для (...; ...; ...) найти поле foo = xxx .
И самое лучшее, что может вам здесь помочь, - это ассоциативный массив awk (называемый словарём, хэшем или картой в других контекстах), в котором вы можете сохранить значение в индексе и проверить, есть ли уже значение в массиве в качестве индекса и принимать решения соответственно. Такие как:
if ( ! (value in myarray) ) {
print thelinevalueisfrom
myarray[value] = 1 # just to register we have seen value for later usage
}
По сути, это все, что вам нужно здесь.