Как соединить столбцы из двух файлов с помощью команды awk/sed?

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

Не теряйте терпения, просто подождите или скомпилируйте это на лучшей машине с лучшим процессором!

0
12.01.2021, 10:32
2 ответа
$ paste file1 file2 | awk '{printf "%s%s=%s", sep, $1, $3; sep=", "} END{print ""}'
A=5.4, B=7.4, C=9.4
1
18.03.2021, 22:37

Обратите внимание, что «соединение» (, упомянутое в заголовке вопроса ), представляет собой конкретную операцию, в которой один набор данных используется для извлечения данных из другого набора данных (операции реляционного соединения ). Это можно сделать утилитой 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).

3
18.03.2021, 22:37

Теги

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