Sto cercando di confrontare due file (Extensions.txt
e Temp.txt
). Se è presente una riga che non corrisponde parzialmente a Extensions.txt
in Temp.txt
Vorrei aggiungere la riga mancante a Temp.txt
.
Extensions.txt
(Molto semplice, una colonna):
111
1234
4321
Temp.txt
:
1234/sip:[email protected]:5060 9421b96c5e Avail 1.480
4321/sip:[email protected]:5060 e9b6b979a4 Avail 1.855
Fondamentalmente, quello che voglio fare è trovare una corrispondenza basata su tutto prima del /
nella prima colonna e se non c'è corrispondenza, vorrei stampare la riga non corrispondente in fondo al file in modo che finisca così:
1234/sip:[email protected]:5060 9421b96c5e Avail 1.480
4321/sip:[email protected]:5060 e9b6b979a4 Avail 1.855
111
Finora ho provato grep -v
e non produce i risultati che voglio, ho anche provato con awk
e sembra che sia la strada da percorrere, tuttavia non ho una piena comprensione di come awk
lavora al fine di produrre i risultati appropriati.
Risposta accettata:
Puoi analizzare i file con awk
awk -F '/' '
FNR == NR {seen[$1] = $0; next}
{if ($1 in seen) print seen[$1]; else missing[$1]}
END {for (x in missing) print x}
' Temp.txt Extensions.txt
Uscita:
1234/sip:[email protected]:5060 9421b96c5e Avail 1.480
4321/sip:[email protected]:5060 e9b6b979a4 Avail 1.855
111
- Imposta il separatore di campo su una barra,
-F '/'
- L'azione dopo
FNR == NR
viene eseguito per le righe del primo file di input. Memorizziamo le righe nell'array associativoseen
come chiavi e vai sunext
linea. - La seconda azione viene eseguita per il secondo file, quando
FNR != NR
. Se il primo campo corrisponde, stampiamo la riga memorizzata,else
salviamo il campo in un altro arraymissing
. - Al
END
, stampiamo le righe mancanti.