prova:
awk 'FNR==NR{a[NR]=$3;next}{$2=a[FNR]}1' f2 f1
uscita:
111 000 444
222 111 555
333 555 666
Spiegazione del codice di cui sopra:
FNR==NR
tutto ti porta a lavorare con un intero file alla volta. In questo caso è il file f2
. NR
e FNR
entrambi contengono numeri di riga con la differenza FNR
viene reimpostato su 1 quando viene letto un nuovo file dove NR
continua ad aumentare.
- Mentre stiamo lavorando con
f2
file, creando un array chiamato a
utilizzando numero della riga (NR
) come colonna key
e terzo ($3
) come valore. next
ci consente di saltare il resto del blocco azione.
- Una volta terminato il file
f2
, iniziamo a lavorare sul file f1
. NR==FNR
condizione non diventa falso come FNR
aumenterà da 1 e NR
no. Quindi verrà elaborato solo il secondo blocco di azioni {$2=a[FNR]}
.
- Che cosa fa questo blocco riassegna il secondo valore di colonna al valore di matrice cercando il numero di riga.
1
alla fine stampa la linea. Restituisce true e nelle affermazioni true awk
risulta la stampa della linea.
f2 f1
è l'ordine dei file definiti. Dal momento che vogliamo creare un array dal file f2
, lo inseriamo per primo.
Potrebbe spiegare il comando. Grazie – saloua
@saloua ho aggiunto qualche spiegazione. Spero possa aiutare! –
Il mio caso d'uso è leggermente diverso (solo leggermente). La differenza è che avevo un file delimitato da virgola per f1 e f2 invece di delimitato da spazi. Ho provato il tuo stesso comando con l'opzione '-F,' ma il file di output non aveva la virgola in quel caso. Qualche modo per risolvere questo problema? – Ganesh