Как объединить два файла построчно в 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 replace-string в Emacs будет убирать вкладки, предположительно Vim и, возможно, некоторые другие текстовые редакторы тоже могут это делать.
Бен

7
используйте опцию -d, чтобы указать разделитель, отличный от tab
Pedru
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.