Как сравнить текст прежде данный символ

Я работаю с выводом программы, которые похожи на это:

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 или перед первым: и удалите копию"

1
задан 28 March 2017 в 13:08

1 ответ

Если какой-либо результат сделал бы, использовать 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, и сохраните целую строку в массив. Каждый раз, когда с дублирующимся результатом встречаются, он перезаписывает предыдущую запись. И в конце просто распечатайте все строки в массиве, который будет теперь иметь только последние результаты каждой системы.

7
ответ дан 3 December 2019 в 06:24

Другие вопросы по тегам:

Похожие вопросы: