Estrarre righe da un file

Linguaggi di programmazione: php, perl, python, C, bash e tutti gli altri.
Scrivi risposta
gasse1985
Prode Principiante
Messaggi: 14
Iscrizione: venerdì 5 settembre 2008, 12:33

Estrarre righe da un file

Messaggio da gasse1985 »

Ciao a tutti vista la disponibilità di questo forum vorrei chiedervi un altra cosuccia  ;D qualcuno mi sa dire in bash come posso fare per estrarre delle righe da un file di testo e metterle tutte in un array ?
in sostanza questo file di testo è un lista di percorsi di file ed io devo copiare questi file in un altra cartella .
grazie ancora in anticipo
Avatar utente
giolock
Scoppiettante Seguace
Scoppiettante Seguace
Messaggi: 352
Iscrizione: lunedì 4 dicembre 2006, 22:11
Località: Santa Vittoria d'Alba (CN)

Re: Estrarre righe da un file

Messaggio da giolock »

Mi sembra che sia una roba del genere:

Codice: Seleziona tutto

N=0
while read riga[$N]
do
  echo riga$N: ${riga[$N]}
  N=$(($N+1));
done < file_input.txt
Preso da qui:
http://www.pluto.it/files/ildp/guide/abs/index.html
Progetto sKaricator – GUI per scaricare audio/video rtsp/mms, real audio, real video, wmv ecc ...
http://forum.ubuntu-it.org/viewtopic.php?t=110947
gasse1985
Prode Principiante
Messaggi: 14
Iscrizione: venerdì 5 settembre 2008, 12:33

Re: Estrarre righe da un file

Messaggio da gasse1985 »

ma sei sicuro che carichi un array? perchè lò provato ma mi stampa le righe a video ma non capisco se mi carichi anche l'array
Avatar utente
giolock
Scoppiettante Seguace
Scoppiettante Seguace
Messaggi: 352
Iscrizione: lunedì 4 dicembre 2006, 22:11
Località: Santa Vittoria d'Alba (CN)

Re: Estrarre righe da un file

Messaggio da giolock »

Be', basta farlo girare e poi provare a fare un

Codice: Seleziona tutto

echo ${riga[numero_qualsiasi]}
Progetto sKaricator – GUI per scaricare audio/video rtsp/mms, real audio, real video, wmv ecc ...
http://forum.ubuntu-it.org/viewtopic.php?t=110947
gasse1985
Prode Principiante
Messaggi: 14
Iscrizione: venerdì 5 settembre 2008, 12:33

Re: Estrarre righe da un file

Messaggio da gasse1985 »

(yes) lo avevo fatto ma avevo lasciato per strada il dollaro  ok funziona ti ringrazio per l'aiuto grazie davvero
Avatar utente
giolock
Scoppiettante Seguace
Scoppiettante Seguace
Messaggi: 352
Iscrizione: lunedì 4 dicembre 2006, 22:11
Località: Santa Vittoria d'Alba (CN)

Re: Estrarre righe da un file

Messaggio da giolock »

Di niente  ;)
Progetto sKaricator – GUI per scaricare audio/video rtsp/mms, real audio, real video, wmv ecc ...
http://forum.ubuntu-it.org/viewtopic.php?t=110947
gasse1985
Prode Principiante
Messaggi: 14
Iscrizione: venerdì 5 settembre 2008, 12:33

Re: Estrarre righe da un file

Messaggio da gasse1985 »

mi serve un ultimo aiuto
il codice che eseguo è questo

Codice: Seleziona tutto

N=0
while read riga[$N]
do

N=$(($N+1))
done < log.txt

for ri in "${riga[@]}"
do
cp "$ri" /mnt/home/Documents/bac
done
ed in effetti mi copia i file come mi aspetto però mi da questo errore

cp: cannot stat `': No such file or directory    :o secondo voi perchè?
Avatar utente
giolock
Scoppiettante Seguace
Scoppiettante Seguace
Messaggi: 352
Iscrizione: lunedì 4 dicembre 2006, 22:11
Località: Santa Vittoria d'Alba (CN)

Re: Estrarre righe da un file

Messaggio da giolock »

forse nel tuo file di testo c'è qualche riga vuota? (tipo alla fine del file?)
Progetto sKaricator – GUI per scaricare audio/video rtsp/mms, real audio, real video, wmv ecc ...
http://forum.ubuntu-it.org/viewtopic.php?t=110947
gasse1985
Prode Principiante
Messaggi: 14
Iscrizione: venerdì 5 settembre 2008, 12:33

Re: Estrarre righe da un file

Messaggio da gasse1985 »

il file di testo lo crea lo script fa prima una ricerca su dei nomi di file e quelli che matchano li scrive in questo file sono abbastanza incasinato in effetti  :'(
gasse1985
Prode Principiante
Messaggi: 14
Iscrizione: venerdì 5 settembre 2008, 12:33

Re: Estrarre righe da un file

Messaggio da gasse1985 »

Codice: Seleziona tutto

#!/bin/bash
if [ -d file_trovati ]
then
rm -r file_trovati
fi
if [ -e log.txt ]
then
rm log.txt
fi 
echo "INSERISCI I PATTERN DA RICERCARE"
read apat bpat cpat dpat epat
          if [ -z $apat ] && [ -z $bpat ] && [ -z $cpat ] && [ -z $dpat ] && [ -z $epat ]
            then 
            echo "nessun pattern inserito"
            exit 1
         else
         pattern=( $apat $bpat $cpat $dpat $epat )
          fi
echo "INSERISCI LE CARTELLE IN CUI CERCARE"
read acar bcar ccar dcar ecar
                   if [ -z $acar ] && [ -z $bcar ] && [ -z $ccar ] && [ -z $dcar ] && [ -z $car ]
                      then
                      def=1
                     else
                     def=0
                   fi
cartelle=( $acar $bcar $ccar $dcar $ecar )
   for x in "${cartelle[@]}"
    do
     if [ -d "$x" ] 
     then
     echo "cartella corretta"
    else
    echo "cartella inesistente errore"
    exit 1
     fi
    done

if [ $def -eq 0 ]
then
            for pa in "${pattern[@]}"
            do
            for ca in "${cartelle[@]}"
            do
            find "$ca" -name "*$pa*" >> log.txt
            
            done
            done
else
   for pa in "${pattern[@]}"
       do
        find . -name "*$pa*" >> log.txt
       done

fi


N=0
while read riga[$N]
do
N=$(($N+1))
done < log.txt

mkdir file_trovati

for ri in "${riga[@]}"
do
cp "$ri" /mnt/home/Documents/file_trovati
done
questo è lo script ( pessimo che sto tirando fuori ) secondo me l'errore lo da perchè ricerca anche se inserisci meno di 5 pattern e aggiunge righe vuote in fondo al file ...

questo sarebbe quello che dovrei fare

Realizzare lo script trova.sh a cui si passano una sequenza non vuota di
pattern seguita da una sequenza di directories. Se la sequenza di
directories è vuota si assume che l'operazione vada eseguita sulla
directory corrente. Lo script ricerca nelle directories passate i files il
cui nome contiene almeno uno dei pattern specificati. Se nessun file è
trovato si restituisce un messaggio adeguato. Viene inoltre creata una
nuova directory file_trovati che contiene una copia dei files trovati ed un
ulteriore file indice.txt che contiene la lista dei files trovati con il
pattern corrispondente.

Dovranno essere effettuati tutti i controlli necessari per evitare
malfunzionamenti del programma.

forse se metto l'input della read direttamente in un array cambia qualcosa secondo te?
Avatar utente
giolock
Scoppiettante Seguace
Scoppiettante Seguace
Messaggi: 352
Iscrizione: lunedì 4 dicembre 2006, 22:11
Località: Santa Vittoria d'Alba (CN)

Re: Estrarre righe da un file

Messaggio da giolock »

Potresti trattare il pattern da cercare come array e far decidere all'utente quanti inserirne.
Con "read -a pattern" devi inserire i vari pattern separati da spazi; e automaticamente saranno inseriri in un array, poi con

Codice: Seleziona tutto

${#pattern[@]}
ottieni il n° di elementi dell'array.

Comunque la parte finale potresti modificarla così:

Codice: Seleziona tutto

N=0
while read riga[$N]
do

if [ "${riga[$N]}" != '' ]
 then cp "${riga[$N]}" /mnt/home/Documents/bac
fi

N=$(($N+1))
done < log.txt
Ultima modifica di Anonymous il sabato 6 settembre 2008, 18:39, modificato 1 volta in totale.
Progetto sKaricator – GUI per scaricare audio/video rtsp/mms, real audio, real video, wmv ecc ...
http://forum.ubuntu-it.org/viewtopic.php?t=110947
gasse1985
Prode Principiante
Messaggi: 14
Iscrizione: venerdì 5 settembre 2008, 12:33

Re: Estrarre righe da un file

Messaggio da gasse1985 »

adesso vedo un po di tirarci fuori qualcosa poi ti faccio sapere .. intanto ti ringrazio per l'aiuto (b2b)
Ultima modifica di gasse1985 il sabato 6 settembre 2008, 18:39, modificato 1 volta in totale.
Scrivi risposta

Ritorna a “Programmazione”

Chi c’è in linea

Visualizzano questa sezione: 0 utenti iscritti e 4 ospiti