LinuxForum.Fans
Тема

Объединить строки двух файлов по ключу

Автор: valet 11 сообщений 4108 просмотров
#276824

Хоть уже как бы и что-то пишу на тех же sed'ах, grep'ах но иногда почему-то казалось бы элементарные выщи не могу сделать - ну не лезет в голову и все.

Задача такая:
есть файл email с содержимым:

email1|pass1
email2|pass2
email100500|pass100500
emailn|passn

и есть файл confirms с содержимым:

email2|code2
email100500|code100500

Нужно получить все данные, для которых есть код, то есть файл all с содержимым:

email2|pass2|code2
email100500|pass100500|code100500

Я как бы и сделал, но работает почему-то криво.

#276850

А можно так: берём из второго файла первую часть строки (email2) через cut в переменную EMAIL и вторую часть в переменнюу CODE, грепаем первый файл по полученному EMAIL в переменную PASS, затем выводим echo "$PASS|$CODE" в требуемый файл.
Ну и всё это в цикле перебирает строки второго файла.

#276882
Lupo Alberto написал:
http://shelr.tv/records/506542c09660807783000008
text

join -t"|" email confirms 2> /dev/null > all

Красивое и изящное решение, но почему-то оно работает на примере из топика, а на реальных файлах не хочет срабатывать - не все связывает почему-то, из 235 связываемых строк получается только почему-то 18.
Пока не могу понять где косяк.

Если бы совсем не работало - я бы думал, что я в чем-то накосячил, но оно действительно связывает правильно, но вот почему-то вместо 235 выходит 18.

#276900

Команда join объединяет только строки с общими полями.

#276905

Как вариант:
— возможно имеет смысл предварительно отсортировать файлы по полю, по которому затем они будут объединяться

#276919

А кол-во строк в mail и confirms совпадает?
ЗЫ. Глупость спросил, общие поля должны в любом случае совпадать...

#276980

"-=Serj=-" написал:
А кол-во строк в mail и confirms совпадает?
нет, в email - все емайлы, в confirms - только те, которые надо подтвердить.

"-=Serj=-" написал:
ЗЫ. Глупость спросил, общие поля должны в любом случае совпадать...
да
#276987

"Lupo Alberto" написал:
Как вариант:
— возможно имеет смысл предварительно отсортировать файлы по полю, по которому затем они будут объединяться
Спасибо, вот это помогло, задача решена!
#276989
valet написал:

[quote="-=Serj=-"]ЗЫ. Глупость спросил, общие поля должны в любом случае совпадать...

да[/quote]
Так первое поле точно во всех строчках обоих файлов - email?

UPD. Опоздал.

Войдите или зарегистрируйтесь, чтобы ответить.