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.
OriginalL'auteur Greg | 2009-09-21
Vous devez vous connecter pour publier un commentaire.
Au lieu d'utiliser une boucle for pour lire dans le fichier, vous devriez peut-être lire le fichier comme si.
read -r line
pour éviter la barre oblique inverse d'enlèvement et de définirIFS=
pour éviter la suppression des espaces blancs.OriginalL'auteur Buggabill
Longue histoire courte,
while read line; do _____ ; done
Ensuite, assurez-vous que vous avez les guillemets autour de "$ligne", de sorte que l'un des paramètres n'est pas délimitée par des espaces.
Exemple:
Deuxième exemple
# ajouter .gz pour chaque fichier dans le répertoire courant:
# Si un des fichiers il y avait des espaces, la commande mv pour cette ligne permettrait de renvoyer une erreur.
while read ...; do ...; done < file
œuvres.OriginalL'auteur Steven
Vous devriez poster suivis comme des modifications à votre question dans les commentaires plutôt que comme une réponse.
Cette structure:
Rendements:
Tandis que celui-ci:
Rendements:
OriginalL'auteur Dennis Williamson