Boucle à travers le contenu d'un fichier en bash

Boucle à travers le contenu d'un fichier en bash

Bash, le shell Bourne-Again, est un shell de ligne de commande populaire et un langage de script qui est largement utilisé pour sa simplicité et sa facilité d'utilisation. L'une des tâches les plus courantes que l'on pourrait avoir besoin pour effectuer en utilisant Bash est de faire un bouclage via le contenu d'un fichier.

Dans cet article, nous explorerons différentes méthodes pour parcourir le contenu d'un fichier à l'aide de scripts bash, y compris la lecture ligne par ligne et mot par mot.

Méthode 1: Utilisation de la commande `` while '' et «lire»

Le 'alors que' boucle combinée avec le 'lire' La commande est la méthode la plus courante pour parcourir le contenu d'un fichier en bash. Cette méthode lit le fichier ligne par ligne, ce qui est particulièrement utile pour le traitement des fichiers volumineux qui peuvent ne pas rentrer dans la mémoire.

#!/ bin / bash filename = "Exemple.txt "while ifs = read -r Line do echo" $ line "fait < "$filename"
12345678#!/ bin / bash filename = "Exemple.txt "while ifs = read -r linedo echo" $ line "fait < "$filename"

Dans cet exemple, nous utilisons le 'IFS' (Séparateur de champ interne) Variable pour spécifier le délimiteur (par défaut, une nouvelle ligne) pour séparer les champs dans l'entrée. Le 'lire' La commande lit chaque ligne, et le 'écho' La commande imprime la ligne à la console.

Méthode 2: Utilisation de la commande «For» Loop et «Cat»

Une autre méthode pour parcourir le contenu d'un fichier consiste à utiliser la commande 'for' Loop and 'Cat'. Cette méthode est moins efficace que la commande `` while '' et la boucle et «lire», car il lit l'ensemble du fichier en mémoire avant de le faire passer.

#!/ bin / bash filename = "Exemple.txt "pour la ligne dans $ (cat" $ nom de fichier ") faire écho" $ line "fait
12345678#!/ bin / bash filename = "Exemple.txt "pour la ligne dans $ (cat" $ nom de fichier ") faire écho" $ line "fait

Dans cet exemple, nous utilisons le 'chat' commande pour lire l'intégralité du contenu du fichier et le 'pour' Loop itère sur chaque ligne. Cependant, cette méthode divise le contenu par Whitespace (espaces, onglets et Newlines) par défaut, ce qui peut entraîner un comportement inattendu lors du traitement des fichiers avec plusieurs mots par ligne.

Méthode 3: Loopage à travers des mots avec «IFS»

Si vous devez traiter un fichier word par mot, vous pouvez utiliser le 'IFS' variable pour changer le délimiteur en un espace.

#!/ bin / bash filename = "Exemple.txt "ifs = $ '\ t \ n' pour mot dans $ (cat" $ filename ") faire écho" $ word "fait
123456789#!/ bin / bash filename = "Exemple.txt "ifs = $ '\ t \ N'For Word dans $ (cat" $ filename ") faire écho" $ word "fait

Dans cet exemple, nous définissons la variable `` IFS '' sur une combinaison d'espace, d'onglet et de caractères Newline, permettant à la boucle d'itérer sur les mots au lieu de lignes.

Méthode 4: Utilisation de «awk» pour une boucle avancée

Pour un traitement de fichiers plus avancé, vous pouvez utiliser la commande 'awk', qui est un puissant outil de traitement de texte avec des fonctionnalités de boucle intégrées.

#!/ bin / bash filename = "Exemple.txt "awk 'for (i = 1; i<=NF; i++) print $i ' "$filename"
12345#!/ bin / bash filename = "Exemple.txt "awk 'for (i = 1; i<=NF; i++) print $i ' "$filename"

Dans cet exemple, 'awk' lit le fichier et les boucles via chaque champ (mot) en utilisant ses variables intégrées 'Nf' (Nombre de champs) et '$ i' (valeur de champ actuelle). Cette méthode est particulièrement utile pour des tâches de manipulation de texte plus complexes.

Conclusion

Dans cet article, nous avons exploré quatre méthodes de boucle via le contenu d'un fichier en bash: en utilisant la boucle «while» 'lire' commande, le 'pour' boucle et 'chat' commande, modifiant le 'IFS' variable à parcourir les mots et à utiliser le 'awk' Commande pour la boucle avancée. Selon votre exigence, choisissez l'une des options ci-dessus pour faire une boucle à travers une amende dans un script shell.