Manuellement l'itération d'une ligne d'un fichier | bash

J'ai pu le faire dans une autre langue, mais avec Bash, j'ai regardé au loin et ne pouvait pas trouver la réponse.

J'ai besoin d'augmenter manuellement $line dans un script. Exemple:

for line in `cat file`
do
foo()
       foo_loop(condition)
{
 do_something_to_line($line) 
}
done

Si vous avez remarqué, chaque fois que le foo_loop itère, $line reste le même. J'ai besoin d'itérer $line là, et assurez-vous que l'original pour la boucle s'exécute uniquement le nombre de lignes dans le fichier.

J'ai pensé à trouver le nombre de lignes dans le fichier en utilisant un autre boucle et en itérant la ligne de variable à l'intérieur de la boucle interne de foo().

Des idées?

EDIT:

Désolé d'être si vague.

Nous y voilà:

Je suis en train de faire une partie de mon code à exécuter plusieurs fois (exécution en parallèle)

Function foo() # Does something
for line in `cat $temp_file`;
foo($line)

Que le code fonctionne très bien, parce que foo est juste la valeur de la ligne; mais si je voulais le faire:

Function foo() # Does something
for line in `cat $temp_file`;
while (some condition)
foo($line)
end

$line sera égal à la même valeur tout au long de la boucle while. J'ai besoin de changer avec le while boucle, puis continuer à quand il remonte à la for. Exemple:

line = Hi
foo{ echo "$line" }; 
for line in `cat file`;
while ( number_of_processes_running -lt max_number_allowed)
foo($line)
end

Si le contenu du fichier ont été

Hi \n Bye \n Yellow \n Green \n

La sortie de l'exemple de programme (si le nombre maximum autorisé était de 3)

Hi Hi Hi Bye Bye Bye Yellow Yellow Yellow Green Green Green.

Où je veux qu'il soit

Hi Bye Yellow Green 

J'espère que c'est mieux. Je fais de mon mieux pour expliquer mon problème.

Je pense que nous avons besoin d'un plus clair exemple de ce que vous essayez d'accomplir. foo() s'affiche pour définir une fonction shell à l'intérieur d'une boucle, je ne sais pas est ce que vous voulez.

OriginalL'auteur Greg | 2009-09-21

Leave a Reply

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *