Cách hợp nhất hai tệp từng dòng trong Bash


178

Tôi có hai tệp văn bản, mỗi tệp chứa một thông tin theo dòng như thế

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

Tôi muốn hợp nhất các dòng tệp này bằng các dòng bằng cách sử dụng tập lệnh bash để có được:

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

Làm thế nào điều này có thể được thực hiện trong Bash?

Câu trả lời:


272

Bạn có thể sử dụng paste:

paste file1.txt file2.txt > fileresults.txt

Làm thế nào nó hoạt động nếu tôi muốn sử dụng một dấu phân cách?
Teja

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

pastesẽ tách mỗi cột với một tab trừ khi bạn ghi đè lên với -dtùy chọn, vì vậy bạn có thể sử dụng một cái gì đó giống như awk, sed, vv ... để định dạng mỗi dòng. Ví dụ: paste file1.txt file2.txt | awk '{printf "%-61s | %s\n", $1,$2}'... cái này bắt chước diff --side-by-sideđầu ra)
Yzmir Ramirez

Câu trả lời chính xác. Sử dụng các công cụ được thực hiện cho công việc!
Tony

4
paste -d ""để nối các đường không có vạch, không gian
Victoria Stuart

20

đây là phương pháp không dán

ôi

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

11

Hãy thử làm theo.

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

1
Ngoài ra, sử dụng tùy chọn -s nếu bạn muốn thay đổi dấu phân cách. (+1)
user.friendly

tùy chọn J không hoạt động trên macOS Mojave nhưng lệnh của bạn thực hiện hoàn hảo. Cảm ơn.
Vịt

8

Kiểm tra

man paste

có thể theo sau bởi một số lệnh như untabifyhoặctabs2spaces


Chuỗi thay thế Mx trong Emacs sẽ đưa ra các tab, có lẽ là Vim và có thể một số trình soạn thảo văn bản khác cũng có thể làm điều đó.
Ben

7
sử dụng tùy chọn -d để chỉ định dấu phân cách khác với tab
Pedru
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.