while
a une syntaxe intéressante. Vous pouvez placer plusieurs commandes avant la do ... while
boucle, et le cas en question peut avoir besoin de jongler avec cette fonctionnalité, en fonction de vos besoins particuliers: lisez-vous jusqu'à la fin du fichier le plus long, ou seulement jusqu'à la fin du plus court.
Par exemple, ne fonctionneread || read
tout simplement pas (conformément aux exigences de la question), car lorsqu'une lecture du premier fichier est effectuée true
, la lecture du deuxième fichier est ignorée jusqu'à ce que le premier fichier ait été lu du début à la fin ... Ensuite, parce que l'état est toujours true
, la boucle while continue et lit le deuxième fichier du début à la fin.
read && read
lira les fichiers simultanément (de manière synchrone) si vous ne souhaitez lire que le fichier le plus court. Cependant, si vous souhaitez lire les deux fichiers eof
, vous devez travailler avec les while's
exigences de syntaxe, par exemple. par la commande immédiatement avant la do while
boucle produisant un code retour différent de zéro pour sortir de la boucle while.
Voici un exemple de lecture des deux fichiers sur eof
while IFS= read -r line3 <&3 || ((eof3=1))
IFS= read -r line4 <&4 || ((eof4=1))
!((eof3 & eof4))
do
echo "$line3, $line4"
done 3<file3 4<file4
(vous voudrez peut-être tester eof3 et eof4 avant la lecture, mais l'idée générale est là, en particulier dans l'état final vrai / faux.
||
ne fonctionne pas pour moi. Il traite fichier1 alors fichier2 , mais il ne conserve les fichiers synchronisés avec&&
qui sort de l' en boucle lors de la première EOF . - GNU bash 4.1.5