Pagina 1 di 1

Confrontare due file testo riga per riga

MessaggioInviato: 22 apr 2020, 16:35
da Max2433BO
Buondì a tutti,

avrei la necessità di confrontare due file testo, nella fattispecie due file relativi alle librerie di FidoCadJ, in modo da vedere se in una mancano o sono state modificate alcune linee di testo.

In pratica mi servirebbe un confronto riga per riga tipo:

prendo tutta una riga dal file campione e la confronto con tutte le righe del file modificato, se è presente, anche in una riga differente OK, altrimenti segnalarla come mancante/modificata.

Alla fine dovrei avere l'elenco delle righe mancanti nel file modificato.

Mi servirebbe per vedere se riesco a replicare un problema che è stato segnalato su FidoCadJ quando si aggiorna una libreria con un nuovo componente.

Ho provato ad utilizzare sia diffuse che meld diff viewer (entrambi GUI del comando da terminale diff) ma questi mi segnalano qualsiasi riga che non corrisponde anche solo per posizione tra i due e, dal momento che in fase di aggiornamento libreria il file può risultare anche con le righe mescolate, questi programmi mi mostrano dei gran falsi positivi.

Per chi non li avesse mai visti allego un file .zip che contiene due file di libreria FidoCadJ: lib_agg.fcl (il file campione) e lib_agg_mod.fcl (il file modificato con l'aggiunta di un componente).

N.B. I file .fcl sono normali file di testo.

O_/ Max

lib_agg_prova.zip
(57.51 KiB) Scaricato 512 volte

Re: Confrontare due file testo riga per riga

MessaggioInviato: 22 apr 2020, 16:53
da tonnoto

Re: Confrontare due file testo riga per riga

MessaggioInviato: 22 apr 2020, 16:56
da Max2433BO
... scusa Foto Utentetonnoto, ma siamo nella sezione Linux per cui mi sembrava sottinteso che cercassi una soluzione da utilizzare con questo s.o....

Re: Confrontare due file testo riga per riga

MessaggioInviato: 22 apr 2020, 17:21
da tonnoto
E' vero, non me ne ero accorto; chiedo scusa.

Re: Confrontare due file testo riga per riga

MessaggioInviato: 23 apr 2020, 0:26
da fairyvilje

Re: Confrontare due file testo riga per riga

MessaggioInviato: 23 apr 2020, 10:57
da Max2433BO
@ Foto Utentetonnoto

... non ti preoccupare, può succedere... :ok:

@ Foto Utentefairyvilje

... effettivamente ho un output più limitato, adesso devo cercare di capire cosa mi vuole dire... :mrgreen:

O_/ Max

Re: Confrontare due file testo riga per riga

MessaggioInviato: 23 apr 2020, 22:32
da DarwinNE
Forse puoi usare una regular expression per estrarre le righe che ti interessano e che contengono l'inizio di un nuovo componente, poi ordinarle come suggeriva Foto Utentefairyvilje ed infine utilizzare diff (o vim -d per aprire i due file, se ti piace questo editor).

Re: Confrontare due file testo riga per riga

MessaggioInviato: 24 apr 2020, 7:48
da Max2433BO
DarwinNE ha scritto:Forse puoi usare una regular expression per estrarre le righe che ti interessano e che contengono l'inizio di un nuovo componente, poi ordinarle (...)


?%

Re: Confrontare due file testo riga per riga

MessaggioInviato: 24 apr 2020, 11:04
da xyz
Ti consigli di studiarti i comandi "diff" e soprattutto "patch", la versione originale fu scritta da Larry Wall (il creatore del Perl). Il comando "patch" riesce a rilevare spostamenti delle modifiche nel file destinazione e se non riesce ti segnala quale parte non è stata possibile processare.

http://man7.org/linux/man-pages/man1/diff.1.html
http://man7.org/linux/man-pages/man1/patch.1.html

Questo comando individua come funzione le righe che iniziano con "[...]" o "{...}"

Codice: Seleziona tutto
diff -urN --show-function-line="^[\[{].*[\]}]" file1.fcl file2.fcl

Esempio di output:

Codice: Seleziona tutto
--- file1.fcl   2020-04-24 10:48:04.768594980 +0200
+++ file2.fcl   2020-04-24 10:56:59.955432927 +0200
@@ -13,7 +13,6 @@
[ROD_ANT Antenna a stilo]
LI 100 95 100 100 0
EV 99 99 101 97 0
-LI 100 90 100 40 0
EP 99 38 101 40 0
RV 97 90 103 95 3
{Batterie}
@@ -30,6 +29,7 @@
[COAX_1_S Cavo coassiale 1 conduttore + schermo]
LI 100 100 150 100
LI 108 95 142 95
+LI 108 95 142 95
EV 106 95 110 105
EV 140 95 144 105
LI 108 105 142 105

il numeri che provi dopo i due caratteri "@@" sono spiegati qui:

https://en.wikipedia.org/wiki/Diff#Unified_format

Re: Confrontare due file testo riga per riga

MessaggioInviato: 24 apr 2020, 11:12
da Max2433BO
Ti ringrazio Foto Utentexyz, avevo già provato a guardare la pagina man del comando diff ma, sinceramente mi ero perso: molto probabilmente non ho una mentalità sufficientemente "analitica" o forse è solo molto arrugginita e ci vuole tempo per farle capire le cose... :mrgreen:

... comunque tenterò nuovamente per vedere se riesco a capire qualcosa (... inoltre la mia scarsa padronanza dell'inglese sicuramente non aiuta... :? ).

O_/ Max