Supponiamo di avere 2 file, ABC.txt
&PQR.txt
con i dati riportati di seguito a titolo esemplificativo:
ABC.txt:
ABC DEF
PQR.txt:
PQR XYZ
Voglio grep
colonna 1 da entrambi i file e scrivi in un terzo file di testo. Come si può fare?
Il mio output previsto è (output.txt):
ABC PQR
Risposta accettata:
Ecco un paio di modi:
-
Usando
paste
ecut
:$ paste -d ' ' <(cut -d' ' -f 1 ABC.txt ) <(cut -d' ' -f 1 PQR.txt ) > output.txt ABC PQR
Se il tuo sistema non supporta la sostituzione dei processi, usa invece questo:
$ cut -d' ' -f 1 ABC.txt > /tmp/aa; cut -d' ' -f 1 PQR.txt > /tmp/bb; paste -d ' ' /tmp/aa /tmp/bb
-
Usando
awk
(grazie @Costas):awk 'FNR==NR{a[FNR]=$1; next}{print a[FNR],$1}' ABC.txt PQR.txt > output.txt
La variabile speciale
FNR
è il numero di riga del file di input corrente eNR
è il numero di riga dell'input in generale, qualunque sia il file da cui proviene. I due sono uguali solo durante la lettura del primo file di input. Quindi, i primi campi del primo file vengono salvati nela
matrice (a[FNR]=$1
) le cui chiavi sono numeri di riga e i cui valori sono i primi campi. Quindi, quando viene raggiunto il secondo file, stampiamo il valore corrispondente al suo numero di riga (a[NR]
) e il 1° campo della riga corrente.