Visualizzazione dei risultati da 1 a 3 su 3
  1. #1

    split di un file in + file

    ciao a tutti

    ho un file che contiene 200 email(spam) in formato testuale separate ognuna da un carattere

    ^L

    c'è un programmino che fa lo split del file per ogni ^L e mi crea 200 file differenti?

    chiedo la luna?

    oppure potrei fare uno script - shell al volo però ho bisogno del vostro aiuto...

    non so

    splitta tutti i blocchi di testo separati da ^L in un array
    redirigi il contenuto dell'elemento iesimo nel file iesimo

    è possibile?
    "durante i primi 5 miuti di pioggia nel bosco c'è ancora asciutto, poi quando smetterà di piovere nel bosco cadranno gocce per 5 minuti.....la natura ha un'ottima memoria..."

    http://www.kumbe.it

  2. #2
    ho risolto con un piccolo script in php

    codice:
    <?
    
    $email=file("spam");
    
    $tutto_file="";
    for($i=0;$i<sizeof($email);$i++){
    $tutto_file.=$email[$i];
    }
    
    //echo $tutto_file;
    
    $emails=explode("\fine",$tutto_file);
    
    for($i=0;$i<sizeof($emails);$i++){
    
    	$filename = "spam_dir/spam_".$i;
    	if (!$handle = fopen($filename, 'w')) {
    		echo "Cannot open file ($filename)";
    		exit;
    	}
    
    	fwrite($handle,$emails[$i]);
    	fclose($handle);
    }
    
    echo $i;
    ?>
    il problema è che cosi mi mette ogni email in un unica stringa e il client di posta poi mi interpreta la mail mettendo tutto headers e body nel testo...
    :master:
    "durante i primi 5 miuti di pioggia nel bosco c'è ancora asciutto, poi quando smetterà di piovere nel bosco cadranno gocce per 5 minuti.....la natura ha un'ottima memoria..."

    http://www.kumbe.it

  3. #3
    Utente di HTML.it L'avatar di cacao74
    Registrato dal
    Jan 2005
    Messaggi
    2,570
    Ho fatto due piccoli esempi da riga di comando con awk.

    Prendo in considerazione le email conservate da Thunderbird; le email sono le notifiche del forum, tanto per essere chiari.
    Ogni email inizia in questo modo:

    From - Tue Aug 9 15:53:31 2005

    ovvero una stringa From seguita da una data in formato esteso.
    Questo per differenziarla dal campo From: dell'header dell'email stessa

    Con AWK, salvo ciascuna mail contenuta nel file 'Inbox', su un file diverso, cosi':
    codice:
    cacao74@winnie:~/tmp/mail$ awk ' \
        BEGIN { counter = 0 } \
        { if ( $0 ~ /^From -/ ) ++counter; print $0 >> "spam-" counter ".eml" } ' Inbox
    Dovendo trattare il tuo file che ha un separatore di record meglio definito rispetto all'esempio precedente, la soluzione dovrebbe essere ancora più semplice.

    Per simulare il tuo file ho concatenato ciascuna file di mail ottenuto dalla riga di comando precedente, seguita dal carattere '^L', in un nuovo file chiamato Mail.
    codice:
    cacao74@winnie:~/tmp/mail$ for file in *.eml; do cat $file >> Mail; echo '^L' >> Mail; done
    Ipotizzando che ogni volta che viene aggiunta un email in questo file, essa viene precedura dal separatore '^L', occorre editare il file appena creato ed eliminare l'ultima riga contenente '^L'. Giusto per essere precisini.

    Ora, per estrarre ciascuna mail, la nuova riga di comando è la seguente:
    codice:
    cacao74@winnie:~/tmp/mail$ awk -v RS="\^L" ' \
        BEGIN { counter = 0 } \
        { print $0 > "spam-" ++counter ".eml" } ' Mail
    Vedi se la cosa ti piace.

    ciao
    slack? smack!

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.