GNU/Linux >> Linux Esercitazione >  >> Linux

Come confrontare due file e quindi aggiungere una riga che non è una corrispondenza parziale?

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 associativo seen come chiavi e vai su next 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 array missing .
  • Al END , stampiamo le righe mancanti.

Linux
  1. Come comprimere file e directory su Linux (con esempi)

  2. Come aggiungere numeri di riga a file di testo su Linux

  3. Come unire due file di testo in Linux

  4. Confronta due colonne di file diversi e stampa se corrisponde?

  5. Come aggiungere più righe a un file?

Come rimuovere file e directory utilizzando la riga di comando di Linux

Come confrontare e unire file di testo su Linux

Come confrontare e unire file di testo su Linux (parte 2)

Come utilizzare il comando cp per copiare file e directory

Come confrontare due file nel terminale Linux

Utilizzo del comando Diff per confrontare due file nel terminale Linux