On 2014-10-27 15:43, Michele Bert wrote:
Sto scrivendo uno script in perl che a grandi linee fa 3 semplicissime cose:- prende un file testo codificato ebcdic, cui tutte le righe sono lunge 79 caratteri, e privo di carattere di fine riga.- lo converte in ascii, ed inserisce un carattere di fine riga ogli 79 caratteri- copia/sposta il risultato in un altra directory
Ciao, Azz, chiamalo semplicissimo, 60 righe... poi serve davvero tutto sto perl?
Per convertire da ebcdic ad ascii uso dd, mettendo l'output in pipe con un HANDLE perl, da cui leggo 79 caratteri alla volta, che scrivo, intervallati da uno '\n', in un file nella direcory corrente. Infine chiamo cp oppure mv attraverso una chiamata system() per spostare il file. Se copio il file il risultato sembra corretto, mentre se lo sposto, alcuni di essi risultano vuoti. Così mi domandavo: esistono dei meccanismi di parallelizzazione o bufferizzazione per cui se io faccio la 'mv' troppo presto, in realtà sto spostando il file prima che questo venga effettivamente scritto? Qualcuno sa darmi qualche altra spiegazione al fenomeno?
Faccio un po' di fatica a leggere perl (anche se al volo alcune cose che vedo non mi tornano del tutto). Se non hai bisogno di una gestione speciale degli errori cosa ti serve in più di un:dd bs=1 conv=ascii < input | sed 's:\(.\{79\}\):\1\n:g' > newdir/output
E secondo me qualche guru di sed riuscirebbe a scriverlo anche più corto... Ciao, Daniele -- Per iscriversi (o disiscriversi), basta spedire un messaggio con OGGETTO "subscribe" (o "unsubscribe") a mailto:linuxtrent-request@xxxxxxxxxxxxx