Да, он может работать часами, все зависит от вашего оборудования и количества кода, который вы пытаетесь скомпилировать.
Не теряйте терпения, просто подождите или скомпилируйте это на лучшей машине с лучшим процессором!
$ paste file1 file2 | awk '{printf "%s%s=%s", sep, $1, $3; sep=", "} END{print ""}'
A=5.4, B=7.4, C=9.4
Обратите внимание, что «соединение» (, упомянутое в заголовке вопроса ), представляет собой конкретную операцию, в которой один набор данных используется для извлечения данных из другого набора данных (операции реляционного соединения ). Это можно сделать утилитой join
(или короткой awk
командой ).
То, что вы хотите сделать, это извлечение данных и слияние. Это хорошо объяснено вами в тексте вопроса.
Предполагая, что у вас есть оболочка bash
, содержимое первого столбца каждого файла можно извлечь с помощью cut
, а затем объединить с =
в качестве разделителя с помощьюpaste
:
$ paste -d '=' <(cut -d ' ' -f 1 File-1) <(cut -d ' ' -f 1 File-2)
A=5.4
B=7.4
C=9.4
Каждая<(...)
(замена процесса )будет заменена именем временного файла, из которого вывод команды cut
внутри замены будет доступен paste
для чтения.
Затем вы можете объединить это в одну строку с разделителями-запятыми -вот так:
$ paste -d '=' <(cut -d ' ' -f 1 File-1) <(cut -d ' ' -f 1 File-2) | paste -d ',' -s -
A=5.4,B=7.4,C=9.4
Если вам нужны пробелы после каждой запятой, можно использовать sed
:
$ paste -d '=' <(cut -d ' ' -f 1 File-1) <(cut -d ' ' -f 1 File-2) | paste -d ',' -s - | sed 's/,/, /g'
A=5.4, B=7.4, C=9.4
Обратите внимание: я предположил, что пустые строки в вопросе на самом деле не являются частью файлов данных. Вы можете предварительно -обработать данные с помощью sed '/^[[:blank:]]*$/d'
, что удалит все пустые строки или строки, содержащие только пробелы и/или табуляцию.
См. также руководство по cut
иpaste
(man cut
и man paste
).