GNU/Linux >> Linux Esercitazione >  >> Linux

Come visualizzare solo righe diverse usando diff (bash)

a.txt:

1;john;125;3
1;tom;56;2
2;jack;10;5

b.txt:

1;john;125;3
1;tom;58;2
2;jack;10;5

Usa comm:

comm -13 a.txt b.txt 
1;tom;58;2

Le opzioni della riga di comando a comm sono piuttosto semplici:

-1 elimina la colonna 1 (righe univoche per FILE1)

-2 elimina la colonna 2 (righe univoche per FILE2)

-3 sopprime la colonna 3 (righe che appaiono in entrambi i file)


Ecco una soluzione semplice che penso sia migliore di diff :

sort file1 file2 | uniq -u

  • sort file1 file2 concatena i due file e li ordina
  • uniq -u stampa le linee univoche (che non si ripetono). Richiede che l'input sia preordinato.

Usando gli identificatori di formato di gruppo puoi sopprimere la stampa delle righe non modificate e stampare solo le righe modificate per quelle modificate

diff --changed-group-format="%>" --unchanged-group-format="" file1 file2


Supponendo che tu voglia conservare solo le righe univoche del file 2 puoi fare:

comm -13 file1 file2

Nota che il comm comando si aspetta che i due file siano ordinati.


Linux
  1. Come eseguire il confronto riga per riga di file in Linux utilizzando il comando diff - Parte II

  2. Come eseguire il confronto riga per riga dei file in Linux usando il comando diff

  3. Come scrivere un numero intero in un file binario usando Bash?

  4. Come sottrarre righe (linee) con AWK

  5. Come visualizzare determinate righe da un file di testo in Linux?

Come visualizzare i cheatsheet dei comandi di Linux usando ad es

Come visualizzare la cronologia di Bash senza numeri di riga

Come visualizzare le informazioni sulla CPU di Linux utilizzando CPUFetch

Come scaricare solo audio utilizzando youtube-dl

Come eseguire l'output in coda -f con i colori utilizzando solo Awk e mostrare il resto dell'output?

Come posso modificare le righe precedenti in un comando a più righe in Bash?