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
pasteecut:$ paste -d ' ' <(cut -d' ' -f 1 ABC.txt ) <(cut -d' ' -f 1 PQR.txt ) > output.txt ABC PQRSe 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.txtLa 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 nelamatrice (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.