Як об'єднати два файли по рядку в Bash


178

У мене є два текстові файли, кожен з них містить інформацію за таким рядком

file1.txt            file2.txt
----------           ---------
linef11              linef21
linef12              linef22
linef13              linef23
 .                    .
 .                    .
 .                    .

Я хотів би об'єднати рядки файлів тез за рядками, використовуючи скрипт bash, щоб отримати:

fileresult.txt
--------------
linef11     linef21
linef12     linef22
linef13     linef23
 .           .
 .           .
 .           .

Як це можна зробити в Bash?

Відповіді:


272

Ви можете використовувати paste:

paste file1.txt file2.txt > fileresults.txt

Як це працює, якщо я хотів би використовувати роздільник?
Тея

8
@SOaddictpaste -d "\n" * > results.txt
Остап Малюванчук

pasteвідокремлять кожен стовпець з вкладкою , якщо не перевизначити з -dопцією, так що ви можете використовувати що - щось на зразок awk, sedі т.д ... для форматування кожного рядка. Приклад: paste file1.txt file2.txt | awk '{printf "%-61s | %s\n", $1,$2}'... це імітує diff --side-by-sideрезультат)
Ізмір Рамірес

Чудова відповідь. Використовуйте інструмент, зроблений для роботи!
Тоні

4
paste -d ""об'єднати лінії без деліметрів, простір
Вікторія Стюарт

20

ось не пасти методи

awk

awk 'BEGIN {OFS=" "}{
  getline line < "file2"
  print $0,line
} ' file1

Баш

exec 6<"file2"
while read -r line
do
    read -r f2line <&6
    echo "${line}${f2line}"
done <"file1"
exec 6<&-

11

Спробуйте виконати наступне.

pr -tmJ a.txt b.txt > c.txt

1
Також скористайтесь опцією -s, якщо ви хочете змінити роздільник. (+1)
user.friendly

варіант J не працює на macOS Mojave, але ваша команда виконує відмінно. Дякую.
Качка

8

Перевірка

man paste

можливо, слідує якась команда, як untabifyабоtabs2spaces


Mx substitu-string в Emacs видалить вкладки, імовірно, Vim і, можливо, це можуть зробити і інші текстові редактори.
Бен

7
скористайтеся опцією -d, щоб вказати роздільник, відмінний від табуляції
Педру
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.