2010-09-27 36 views
114

我有两个文本文件,他们每个人的包含线这样那样的如何通过线巴什合并两个文件的行

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

的信息,我想用一个bash行合并论文文件中的行脚本以获得:

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

这怎么可以在Bash中完成?

回答

177

您可以使用paste

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

如果我想使用分隔符,它是如何工作的? – Teja 2016-04-29 14:31:45

+3

@SOaddict'''paste -d“\ n”*> results.txt''' – 2016-05-04 18:59:36

+0

'paste'会将每列与标签分开,除非你用'-d'选项覆盖,所以你可以使用' awk','sed'等等来格式化每一行。例如:'paste file1.txt file2.txt | awk'{printf'%-61s |%s \ n“,$ 1,$ 2}''...这模仿了'diff -side-by-side'输出) – 2016-05-27 17:50:45

8

检查

man paste 

可能随后像untabifytabs2spaces

+0

Emacs中的M-x替换字符串将取出标签,据推测Vim和其他一些文本编辑器也可以做到这一点。 – Ben 2014-08-08 08:06:02

+6

使用-d选项指定标签以外的分隔符 – Pedru 2014-09-16 12:43:53

18

这里的非粘贴方法的一些命令

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<&- 
8

尝试以下。

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

另外,如果要更改分隔符,请使用-s选项。 (1) – 2017-06-12 18:29:36