Я работаю с выводом программы, которые похожи на это:
Computer1@domain.com:randomtext1:completion of randomtext
Computer2@domain.com:randomtext4:completion of randomtext
Computer1@domain.com:randomtext3:completion of randomtext
Computer3@domain.com:randomtext2:completion of randomtext
Computer2@domain.com:randomtext5:completion of randomtext
Computer1@domain.com:randomtext6:completion of randomtext
Computer3@domain.com:randomtext7:completion of randomtext
Computer2@domain.com:randomtext8:completion of randomtext
Таким образом, как Вы видите, тот же компьютер даст мне больше чем один результат, но каждый результат отличается с точки зрения содержания и длины (но все в одной строке). Некоторые компьютеры дадут только 1 результат, и некоторые дадут до 15 результатов, в зависимости от действия того компьютера.
То, что я хочу, - то, что я хотел бы видеть только один результат каждого компьютера вместо всех результатов. Что я делаю прямо сейчас то, что я сортирую его и удаляю копию вручную, которая не очень полезна! Я пытался использовать команды, такие как разность и коммуникация, но никакая удача (который имеет смысл начиная со строк, очень отличаются).
Так, как может я изменять выходное использование через терминал, чтобы быть подобным этому:
Computer1@domain.com:randomtext1:completion of randomtext
Computer2@domain.com:randomtext4:completion of randomtext
Computer3@domain.com:randomtext2:completion of randomtext
Идея в моей голове состоит в том, что, возможно, существует способ сказать, что терминал "Выдерживает сравнение что перед .com или перед первым: и удалите копию"
Если какой-либо результат сделал бы, использовать sort
и попросите уникальный вывод:
sort -ut: -k1,1 foo
Опции:
-k 1,1
только используйте первое поле для сортировки-t:
использовать :
как разделитель полей-u
удалите дубликаты из вывода на основе поля сортировкиТочно так же в awk:
awk -F: '!a[$1]++' foo
В обеих командах, с помощью :
как разделитель полей, мы только смотрим на первое поле.
Это awk
команда (и, я думаю, sort
управляйте также), распечатает только первый результат.
Получить последний результат:
awk -F: '{a[$1] = $0} END {for (i in a) print a[i]}'
Здесь, мы используем первое поле в качестве индекса в массив a
, и сохраните целую строку в массив. Каждый раз, когда с дублирующимся результатом встречаются, он перезаписывает предыдущую запись. И в конце просто распечатайте все строки в массиве, который будет теперь иметь только последние результаты каждой системы.