2011-12-06 7 views
5

ho due file di testo che hanno queste strutture:Unire le colonne da file diversi

file 1

Column1:Column2 
Column1:Column2 
... 

File 2

Column3 
Column3 
... 

vorrei creare un file che ha questa struttura di file:

Column1:Column3 
Column1:Column3 
... 

aperto a qualsiasi suggerimento, ma sarebbe bello se la soluzione può essere fatto da una shell Bash, o sed/awk/perl/etc ...

risposta

11
cut -d: -f1 "File 1" | paste -d: - "File 2" 

Questo taglia campo 1 da File 1 (delimitato da due punti) e lo incolla con l'unica colonna nel File 2, separando i campi di output con due punti.

4

Ecco una soluzione awk. Presuppone che file1 e file2 abbiano un numero uguale di righe.

awk -F : '{ printf "%s:",$1; getline < "file2"; print }' < file1 
2

Da un'implementazione bash pura non è stato suggerito, anche assumendo un pari numero di linee (bash solo v4):

mapfile -t file2 < file2 

index=0 
while IFS=: read -r column1 _; do 
     echo "$column1:${file2[index]}" 
     ((index++)) 
done < file1 

bash v3:

IFS=$'\n' read -r -d '' file2 < file2 

index=0 
while IFS=: read -r column1 _; do 
     echo "$column1:${file2[index]}" 
     ((index++)) 
done < file1 
Problemi correlati