Come unire due file riga per riga in Bash


178

Ho due file di testo, ognuno di essi contiene un'informazione per riga come quella

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

Vorrei unire queste righe file per righe usando uno script bash per ottenere:

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

Come può essere fatto in Bash?

Risposte:


272

Puoi usare paste:

paste file1.txt file2.txt > fileresults.txt

Come funziona se vorrei utilizzare un delimitatore?
Teja,

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

pasteseparerà ogni colonna con una scheda a meno che non si sostituisce con l' -dopzione, in modo da poter usare qualcosa di simile awk, sedecc ... per formattare ogni riga. Esempio: paste file1.txt file2.txt | awk '{printf "%-61s | %s\n", $1,$2}'... questo imita l' diff --side-by-sideoutput)
Yzmir Ramirez,

Bella risposta. Usa lo strumento creato per il lavoro!
Tony,

4
paste -d ""concatenare le linee senza delimitatori, spazio
Victoria Stuart

20

ecco i metodi non-paste

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

Prova a seguire.

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

1
Inoltre, utilizzare l'opzione -s se si desidera modificare il separatore. (+1)
user.friendly

l'opzione J non funziona su macOS Mojave ma il tuo comando funziona perfettamente. Grazie.
Duck,

8

Dai un'occhiata

man paste

possibile seguito da un comando come untabifyotabs2spaces


Mx sostituisce la stringa in Emacs eliminerà le schede, presumibilmente Vim e forse anche altri editor di testo possono farlo.
Ben

7
usa l'opzione -d per specificare un separatore diverso da tab
Pedru
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.