2011-06-20 6 views
2

J'ai trouvé ce script perl here qui semble fonctionnera pour mes fins. Il ouvre un fichier texte Unicode et lit chaque ligne afin qu'une commande puisse être exécutée. Mais je ne peux pas comprendre comment exécuter une commande ICU sur chaque ligne. Est-ce que quelqu'un peut m'aider? L'erreur que je reçois est (grand fichier est le nom du script): erreur de syntaxe à la ligne ./largefile 11, près de "/". modèle de recherche ne se termine pas à la ligne de ./largefile 11.Perl Script pour lire le fichier ligne par ligne et exécuter la commande sur chaque ligne

#!/usr/bin/perl 

use strict; 
use warnings; 

my $file = 'test.txt'; 
open my $info, $file or die "Could not open $file: $!"; 

while(my $line = <$info>) {  
do 
LD_LIBRARY_PATH=icu/source/lib/ ./a.out "$line" >> newtext.txt 
done 
} 

close $info; 

Fondamentalement, je veux ouvrir un fichier texte volumineux et exécutez la commande (qui fonctionne normalement à partir de la ligne de commande ... Je pense que j'appelle cela en le script perl est le problème, mais je ne sais pas comment le réparer) "LD_LIBRARY_PATH = icu/source/lib/./a.out" $ line ">> newtext.txt" sur chaque ligne pour que "newtext. txt "est alors rempli avec toutes les lignes après avoir été traitées par le script. La partie ICU est en train de casser les mots pour le khmer.

Toute aide serait grandement appréciée! Je ne suis pas un programmeur ... Merci!

+0

est cette commande censé être exécuté à partir invite de commande ou terminal? –

+0

Je lance normalement LD_LIBRARY_PATH = icu/source/lib/./a.out "quelque chose ici" >> newtext.txt à l'intérieur du terminal dans Ubuntu – Nathan

+1

aha, puis mettre toute la commande dans le système, comme système ("LD_LIBRARY_PATH = icu/source/lib/./a.out $ line >> newtext.txt "); PS: le point-virgule est important, tout comme les guillemets –

Répondre

1

Pour exécuter les commandes du terminal, la commande doit être dans le système(), donc une modification à

system("LD_LIBRARY_PATH=icu/source/lib/ ./a.out $line >> newtext.txt"); 
+0

Est-ce que les backticks ou qx // font la même chose? Les backticks – Jon

+0

renvoient la sortie de la commande en cours d'exécution. Si vous n'avez pas besoin de la sortie, utilisez system(). Il est également bon de vérifier la valeur de retour de sytem. Ou utilisez http://search.cpan.org/perldoc?IPC::System::Simple ou "autodie" pour récupérer les erreurs. –

1

Avez-vous essayé les apostrophes inverses:

while (my $line = <$info>) { 
    `LD_LIBRARY_PATH=icu/source/lib/ ./a.out "$line" >> newtext.txt` 
    last if $. == 2; 
} 
Questions connexes