2 votes

Script Perl pour lire un fichier ligne par ligne et exécuter une commande sur chaque ligne

J'ai trouvé ce script perl ici qui semble fonctionner pour mes besoins. 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 certaine commande ICU sur chaque ligne. Quelqu'un peut-il m'aider? L'erreur que je reçois est (largefile est le nom du script): erreur de syntaxe à la ligne 11 de ./largefile, près de "/ ." Le modèle de recherche n'est pas terminé à la ligne 11 de ./largefile.

#!/usr/bin/perl

use strict;
use warnings;

mon fichier = 'test.txt';
ouvrir mon $info, $fichier or die "Impossible d'ouvrir $fichier: $!";

tant que( ma ligne = <$info>)  {      
faire
LD_LIBRARY_PATH=icu/source/lib/ ./a.out "$line" >> newtext.txt
fait
}

fermer $info;

En gros, je veux ouvrir un fichier texte volumineux et exécuter la commande (qui s'exécute normalement à partir de la ligne de commande... je pense que la manière dont j'appelle cela dans le script perl est le problème, mais je ne sais pas comment le corriger) "LD_LIBRARY_PATH=icu/source/lib/ ./a.out "$line" >> newtext.txt" sur chaque ligne afin que "newtext.txt" soit ensuite peuplé de toutes les lignes après qu'elles aient été traitées par le script. La partie ICU casse les mots pour le khmer.

Toute aide serait grandement appréciée! Je ne suis pas très doué en programmation... Merci!

1voto

j.w.r Points 3747

Avez-vous essayé les backticks :

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

1voto

Adithya Surampudi Points 2529

Pour exécuter des commandes terminal, la commande doit être dans system(), donc changer à

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

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X