Como mesclar dois arquivos linha por linha no Bash


178

Eu tenho dois arquivos de texto, cada um deles contém uma informação por linha como essa

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

Gostaria de mesclar esses arquivos linhas por linhas usando um script bash para obter:

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

Como isso pode ser feito no Bash?

Respostas:


272

Você pode usar paste:

paste file1.txt file2.txt > fileresults.txt

Como funciona se eu gostaria de usar um delimitador?
Teja 29/04

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

pastevai separar cada coluna com um guia a menos que você substituir com a -dopção, então você pode usar algo como awk, sed, etc ... para formatar cada linha. Exemplo: paste file1.txt file2.txt | awk '{printf "%-61s | %s\n", $1,$2}'... este imita a diff --side-by-sidesaída)
Ýzmir Ramirez

Ótima resposta. Use a ferramenta feita para o trabalho!
Tony

4
paste -d ""a linhas de concatenar sem delimitadores, espaço
Victoria Stuart

20

aqui está métodos de não colar

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

11

Tente seguir.

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

1
Além disso, use a opção -s se desejar alterar o separador. (+1)
user.friendly

a opção J não funciona no macOS Mojave, mas seu comando funciona perfeitamente. Obrigado.
Duck

8

Verifica

man paste

possível seguido por algum comando como untabifyoutabs2spaces


Mx replace-string no Emacs removerá abas, presumivelmente o Vim e talvez outros editores de texto também possam fazê-lo.
Ben

7
usar a opção -d para especificar um separador diferente de guia
Pedru
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.