Bene, parte imparare a usare Unix è capire quali sono gli script esistenti. In questo caso devi sapere un po 'di come awk
funziona per capire il codice. Mi concentrerò sulla descrizione della parte awk
, questo dovrebbe farti iniziare a capire il resto.
Fondamentalmente awk
è un linguaggio di scripting basato su pattern, in cui i comandi consistono sia in un modello / condizione (di ricerca) che in un blocco di codice corrispondente. Durante l'esecuzione, qualsiasi file di input viene letto riga per riga e se il pattern / condizione è vero per una riga, viene eseguito il blocco di codice. Esistono modelli speciali BEGIN
e END
che vengono utilizzati per attivare il codice per ottenere prima la prima riga o dopo l'ultima riga viene letta.
Nel tuo esempio hai tre linee modello / codice:
NR==FNR {a[i++]=$0};
NR
e FNR
sono due variabili speciali impostate da awk
. Puoi vedere il loro significato con man awk
per vederlo
NR ordinal number of the current record
FNR ordinal number of the current record in the current file
quindi in pratica questa condizione è vera mentre le righe della prima riga vengono lette (il che significa che a[i++]=$0
viene eseguito una volta per ogni riga dal primo file) e false per tutti i file aggiuntivi. $0
è la riga di input corrente.
{b[x++]=$0;};{k=x-i};
Questo blocco di codice non ha alcuna condizione / modello, quindi viene eseguito per ogni riga letta (da tutti i file incluso il primo).
END {for(j=0;j<i;) print a[j++],b[k++]}'
Questa parte viene eseguita dopo che l'ultima riga dell'ultimo file è stata letta ed elaborata.
Con queste basi dovresti essere in grado di capire da solo il significato dei diversi blocchi e variabili di codice.