Pagina 1 di 2

Confrontare righe in un file di testo

Inviato: martedì 22 luglio 2008, 14:24
da cattivocliente
Ciao,
ho uno script (abbastanza lungo) e la necessità di verificare se questo contiene righe uguali. Come potrei fare?

Grazie, Cè :)

Re: Confrontare righe in un file di testo

Inviato: martedì 22 luglio 2008, 14:30
da nadiag81
credo che si possa usare questo:

#cat elenco-numeri-telefono.txt | grep Andrea
-->Qui immaginiamo di avere un file di testo in cui ogni riga contiene un nome, un cognome ed un numero di telefono. Con il comando cat si mostra il suo contenuto, ma prima che ciò avvenga il comando grep filtra l’output mantenendo solo le righe in cui compare la parola Andrea.
#cat elenco-numeri-telefono.txt | less


non so se è quello che fa al caso tuo però...

Re: Confrontare righe in un file di testo

Inviato: martedì 22 luglio 2008, 14:35
da cattivocliente
se funziona fa al caso mio... lo provo e te lo faccio sapere. Grazieeeeeeeee

Re: Confrontare righe in un file di testo

Inviato: martedì 22 luglio 2008, 14:52
da cattivocliente
:'(  no... questo comando filtra le righe che corrispondono al criterio assegnato, io ho bisogno di controllare se nel documento esistono (e quali sono) righe ripetute... Mi aiutate please!!?

Re: Confrontare righe in un file di testo

Inviato: martedì 22 luglio 2008, 14:58
da mohr tutchy
Apri il file con gvim, quindi File>Finestra Differenza con> Seleziona il file da confrontare

One love

Re: Confrontare righe in un file di testo

Inviato: martedì 22 luglio 2008, 14:59
da nadiag81
e questo?

Filtri che operano su input di tipo testo [modifica]

Molti filtri sono usati per manipolare il testo e molti di questi applicano le proprie regole riga per riga, ecco alcuni tra quelli più comunemente usati:

   * cut - estrae parti di ogni riga
   * grep - estrae le linee che contengono certe parole e/o che rispondono a certe caratteristiche (vedi espressioni regolari)
   * head - riporta soltanto le prime righe
   * tail - riporta soltanto le ultime righe
   * sort - ordina le righe (quindi restituisce tutto l'input, dopo averlo ordinato)
   * uniq - elimina le righe ripetute (spesso usato insieme a sort
   * comm
   * expand
   * fold - spezza su più righe in output le righe in input troppo lunghe
   * nl
   * pr
   * split
   * tee
   * tr
   * wc
   * awk e sed - questi possono essere usati per costruire filtri abbastanza complicati, perché sono in realtà degli interpreti di programmi (script) scritti in un linguaggio pensato espressamente per la manipolazione dei file di testo.

Per operazioni ancora più elaborate possono essere usati anche linguaggi di scripting come perl, php, python o shell programming come sh e bash, ma in questi casi la funzionalità di filtro non è quella principale del programma.

Re: Confrontare righe in un file di testo

Inviato: martedì 22 luglio 2008, 15:01
da unicatout
l'unica è farti uno script che ti fa la verifica sullo script!!!  (good)

Re: Confrontare righe in un file di testo

Inviato: martedì 22 luglio 2008, 15:06
da cattivocliente
...che abbondanza di aiuti!!! Grazie, mi metto al lavoro e vi faccio sapere...  (good)

Re: Confrontare righe in un file di testo

Inviato: martedì 22 luglio 2008, 15:30
da unicatout
devi solo trovare le righe doppie o devi farci qualcos'altro?

Re: Confrontare righe in un file di testo

Inviato: martedì 22 luglio 2008, 15:52
da cattivocliente
devo trovare le righe doppie per cancellare i doppioni

Re: Confrontare righe in un file di testo

Inviato: martedì 22 luglio 2008, 15:53
da nadiag81
ci sei riuscito quindi? o non ancora? ora sono curiosa...

Re: Confrontare righe in un file di testo

Inviato: martedì 22 luglio 2008, 15:57
da cattivocliente
Non ancora, ma devo provare il suggerimento di mohr tutchy (leggi sopra) poi ti dico...  :D

Re: Confrontare righe in un file di testo

Inviato: martedì 22 luglio 2008, 16:06
da mohr tutchy
Grazie della fiducia cattivocliente, ma ti ho detto una cavolata  ::)
Non avevo capito di cosa avessi bisogno, il mio suggerimento sarebbe stato utile se avessi dovuto confrontare due script, non le righe dello stesso script...
Scusa

One love

Re: Confrontare righe in un file di testo

Inviato: venerdì 25 luglio 2008, 9:51
da unicatout
qualcuno è riuscito a fare qualcosa?
...domani dovrei avere un po di tempo, così ci provo!!

Re: Confrontare righe in un file di testo

Inviato: venerdì 25 luglio 2008, 10:23
da scacchia
unicatout ha scritto: qualcuno è riuscito a fare qualcosa?
...domani dovrei avere un po di tempo, così ci provo!!
ma non ho capito una cosa, tu vuoi trovare in un file di testo (script in questo caso) 2 righe perfettamente identiche?

in questo caso potresti usare sort per ordinare il file... prova cosi:

Codice: Seleziona tutto

sort NOMEFILE_DA_ORDINARE > NOMEFILE_ORDINATO
, a quel punto o ti scorri il NOMEFILE_ORDINATO cercando 2 righe uguali, essendo subito una dopo l'altra non è difficile trovarle, o de il file è troppo lungo per cercarle ad occhio, devi ricorrere ad uno scrippettino che legga la riga e la confronti con quella precedente per vedere se sono uguali.

PS: Per altri tipi di compare, tra file diversi o directory diverse consiglio meld  :)

Re: Confrontare righe in un file di testo

Inviato: venerdì 25 luglio 2008, 12:45
da unicatout
forse ci sono riuscito!!!!
appena ho un attimo vi posto lo script!!!

Re: Confrontare righe in un file di testo

Inviato: venerdì 25 luglio 2008, 18:26
da unicatout
@ cattivocliente
prova a vedere se così può andare!
...le righe doppie non le cancella ma le commenta! (eventualmente si possono anche cancellare)

questo è lo script:

Codice: Seleziona tutto

#!/bin/bash

# Data       : 25-07-2008
# Nome script: crd.sh
# Descrizione: commenta le righe doppie presenti in un file (escluso la prima trovata)
#-------------------------------------------------------------------------------------


# input utente
# faccio inserire all'utente il percorso e nome 
# dei files (da elaborare e modificato).
clear
while [[ $pathFileOrig = "" ]]; do
   echo -n "Digita il percorso seguito dal nome del file da elaborare: "
   read pathFileOrig
done
while [[ $pathFileMod = "" ]]; do
   echo -n "Digita il percorso seguito dal nome del file modificato: "
   read pathFileMod
done

# leggo quante righe ha il file e mi salvo il 
# numero ottenuto nella variabile "tr"
tr=`wc -l $pathFileOrig | awk '{ print $1 }'`

# inserisco il file originale in un array
# commentando le righe doppie successive
# alla prima trovata.
let i=1
let z=1
let j=1
while read riga
do
   for j in `seq 1 $z`;do
      if [ $i = "1" ]
         then
            array[i]=$riga
      elif [[ $riga = "${array[j]}" ]]
         then #se uguale
            array[i]='# '$riga
            break
         else #se diverso
            array[i]=$riga
      fi
   done
   let i=i+1
   let z=i-1
done < $pathFileOrig

# traferisco i dati presenti nell'array
# nel file "pathFileMod"
for u in `seq 1 $tr`
do
   echo ${array[u]} >> $pathFileMod
done
...fatemi sapere come si può migliorare!!

Re: Confrontare righe in un file di testo

Inviato: sabato 26 luglio 2008, 15:34
da cattivocliente
Unica, ora non sono a casa ma stasera o domani provo il tuo script e ti faccio sapere. Intanto grazie :)

Re: Confrontare righe in un file di testo

Inviato: sabato 26 luglio 2008, 15:49
da Caf-Pow
servirebbe anche a me, ma lo script non funziona  :-\

vengono aggiunte le righe del primo documento nel secondo, senza però commentare le righe già presenti nel primo, quindi i doppioni rimangono :-\

facendo delle prove vengono commentate solo alcune righe  :-\

Re: Confrontare righe in un file di testo

Inviato: sabato 26 luglio 2008, 15:53
da unicatout
come non funziona?!??  :o

ho riprovato adesso e funziona perfettamente!!!

che tipo di file stai elaborando così provo anch'io?