LINUX.ORG.RU
ФорумAdmin

Объединить текстовые файлы

 , , , ,


0

1

Здравствуйте уважаемые!
Прошу помощи.
Тяму не хватает наваять скрипт или последовательность команд.
Есть file1.txt и file2.txt в каждой строке уникальное содержимое:

cat file1.txt

mail@domain submail@domain
mail@domain submail@domain
mail@domain submail@domain

cat file2.txt
submail@domain phone
submail@domain phone


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

cat file_out.txt
mail@domain submail@domain phone
как сделать? уже котелок не варит.


А если вхождений в первом или втором файле будет больше или меньше, что делать собираешься?

mord0d ★★★★★
()
Ответ на: комментарий от mord0d

Вот тоже, хз. В одном файле около 100 строк, во 2м 200+. Надо вырезать все лишнее и оставить только сопоставимые.

CeMKa
() автор топика
Ответ на: комментарий от CeMKa

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

mord0d ★★★★★
()

Ничего не понял, но sort -k $F,$F join -1 $F1 -2 $F2

anonymous
()
awk -v name1=file1.txt -v name2=file2.txt '
BEGIN { split("", map1);  split("", map2); }
FILENAME == name1 { map1[$0] = $2; next; }
FILENAME == name2 { map2[$1] = $2; next; }
END { for (l in map1) print l, map2[map1[l]]; }
' file1.txt file2.txt

Если есть возможность отсортировать (а я так понял, что есть), то проще, конечно, join’ом.

berrywizard ★★★★★
()
Последнее исправление: berrywizard (всего исправлений: 2)
Ответ на: комментарий от berrywizard

Зачем в BEGIN магия со сплитом? Переменные инициализируются при первом обращении. Да и next, не думаю, что нужен.

gedisdone ★★★
()
Ответ на: комментарий от berrywizard

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

gedisdone ★★★
()
Ответ на: комментарий от berrywizard

Спасибо большое, добрый человек! :)

CeMKa
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.