Bashで2つのファイルを1行ずつマージする方法


178

2つのテキストファイルがあり、それぞれにそのような行ごとの情報が含まれています

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

以下を取得するために、bashスクリプトを使用してこれらのファイルを1行ずつマージしたいと思います。

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

これはどのようにしてBashで実行できますか?

回答:


272

使用できますpaste

paste file1.txt file2.txt > fileresults.txt

区切り文字を使用したい場合、どのように機能しますか?
Teja

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

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 2017年

JオプションはmacOS Mojaveでは機能しませんが、コマンドは完全に機能します。ありがとう。
ダック

8

小切手

man paste

untabifyまたはのようないくつかのコマンドが続くtabs2spaces


EmacsのMx replace-stringはタブ、おそらくVimを取り除き、おそらく他のテキストエディターもそれを行うことができます。
2014

7
-dオプションを使用して、タブ以外の区切り文字を指定します
Pedru
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.