-1

Если у меня есть набор URL-адресов в файле, как:

http://example.com/do?foo=bar&etc=123

http://example.com/do?etc=456&foo=bar

Я хочу отфильтровать это так, чтобы для каждого уникального значения параметра 'foo' был только один URL. Остальная часть URL не имеет значения, для меня важно только то, что у меня нет двух или более строк с одинаковым значением «foo».

1 ответ1

0

Поскольку вы пометили вопрос с помощью 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
}

По сути, это все, что вам нужно здесь.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .