如何在Bash中逐行合并两个文件


185

我有两个文本文件,每个文件都包含一行这样的信息

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

我想使用bash脚本逐行合并这些文件,以获得:

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

如何在Bash中完成?

Answers:


284

您可以使用paste

paste file1.txt file2.txt > fileresults.txt

如果我想使用定界符怎么办?
2016年

8
@SOaddictpaste -d "\n" * > results.txt
Ostap Maliuvanchuk '16

paste将除非你与覆盖每一列与制表符分隔-d选项,这样你就可以使用像awksed等...格式化每一行。示例:paste file1.txt file2.txt | awk '{printf "%-61s | %s\n", $1,$2}'...这模仿了diff --side-by-side输出)
Yzmir Ramirez

4
paste -d ""连接没有分界线,空间的线
Victoria Stuart

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上不起作用,但是您的命令执行得很好。谢谢。
鸭子

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.