Ho trovato questa domanda/risposta su Google e sembra riferirsi a un set di dati molto specifico trovato in un'altra domanda (How to merge two files using AWK?). Quello che segue è la risposta che stavo cercando (e che penso che la maggior parte delle persone sarebbe), cioè semplicemente per concatenare ogni riga da due file diversi usando AWK. Anche se probabilmente si potrebbe utilizzare alcune utility UNIX come uniscono o pasta, AWK è ovviamente molto più flessibile e potente se l'output desiderato è diverso, utilizzando se dichiarazioni, o alterare le OFS (che possono essere più difficile fare a seconda dell'utilità; vedi sotto) per esempio, alterando l'uscita in un modo molto più espressivo (una considerazione importante per scripters shell)
per semplice concatenazione riga per riga:
awk 'FNR==NR { a[FNR""] = $0; next } { print a[FNR""], $0 }' file1 file2
.
Questo emula la funzione di una matrice indicizzata numericamente (AWK ha solo array associativi) utilizzando la conversione del tipo implicito. È relativamente espressivo e facile da capire.
Utilizzando due file chiamato test1 e test2 con le seguenti righe:
test1:
line one
line two
line three
test2:
line four
line five
line six
ottengo questo risultato:
line one line four
line two line five
line three line six
A seconda di ho Se si desidera unire i valori tra le colonne nell'output, è possibile selezionare il separatore del campo di output appropriato. Ecco un esempio con ellissi (...) Che separa le colonne:
awk 'BEGIN { OFS="..."} FNR==NR { a[(FNR"")] = $0; next } { print a[(FNR"")], $0 }' test1 test2
Cedendo questo risultato:
line one...line four
line two...line five
line three...line six
Spero almeno che questa ispira tutti voi di sfruttare la potenza di AWK!
Kent, spiegazione eccellente; Grazie mille. Non mi rendevo conto che il 'FNR == NR' stava formando un tipo di dichiarazione 'se'. Questo è esattamente ciò di cui ho bisogno per essere in grado di andare avanti. Grazie mille per il tempo di aiutare! – jkovba