2010-09-27 2 views
114

У меня есть два текстовых файл, каждый из которых содержит информацию по линии такого типа, чтоКак объединить два файл построчно в Bash

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

Я хотел бы объединить тезисы файлов линии по линиям с использованием Баша сценарий для получения:

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

Как это можно сделать в Bash?

ответ

177

Вы можете использовать paste:

paste file1.txt file2.txt > fileresults.txt 
+0

Как это работает, если я хотел бы использовать разделитель? – Teja

+3

@SOaddict '' 'paste -d" \ n "*> results.txt''' –

+0

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

8

Проверить

man paste 

возможно следуют некоторые команды, как untabify или tabs2spaces

+0

M-x replace-string в Emacs выведет вкладки, предположительно Vim и, возможно, некоторые другие текстовые редакторы тоже смогут это сделать. – Ben

+6

используйте параметр -d, чтобы указать разделитель, кроме вкладки – Pedru

18

здесь методы не пасты

AWK

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

Bash

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

Попробуйте следующее.

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

Также, используйте параметр -s, если вы хотите изменить разделитель. (+1) –

Смежные вопросы