2016-04-13 3 views
1

Мне нужно искать уникальные строки в текстовом файле, однако есть дополнительная настройка. Мне нужно рассматривать как дубликаты строк, у которых первая часть (разделенная точкой) равна. Например:bash найти уникальные строки в файле

DEASLR98 
DEASLR98.acme.it 

Эти строки равны, однако

sort file.txt | uniq 

Включает их обоих. Любое предложение о том, как включить только строку с полной информацией о домене (например, DEASLR98.acme.it)? Спасибо!

+0

Если есть 'DEASLR98.foo.bar' и' DEASLR98.example.com', какой из них следует выиграть? – tripleee

ответ

1

Описание: Простая реализация Awk uniq, которая сохраняет самое длинное соответствие для каждой клавиши.

awk -F . '!($1 in a) || length(a[$1]) < length($0) { a[$1] = $0 } 
    END { for (k in a) print a[k] }' file.txt 

-F . инструктирует Awk, чтобы разделить каждую входную линию на точках. Таким образом, $1 содержит поле перед первой точкой. Если это поле отсутствует в массиве a, или линия длиннее существующего значения для этого ключа, мы сохраняем всю строку ввода ($0) в массиве. В конце мы печатаем значения в массиве. Это, очевидно, потребует, чтобы массив вписывался в память.

Смежные вопросы