GNU/Linux >> Tutoriels Linux >  >> Linux

Comment analyser chaque ligne d'un fichier texte comme argument d'une commande ?

Je cherche à écrire un script qui prend un .txt filename comme argument, lit le fichier ligne par ligne et passe chaque ligne à une commande. Par exemple, il exécute la command --option "LINE 1" , puis command --option "LINE 2" , etc. La sortie de la commande est écrite dans un autre fichier. Comment est-ce que je fais ça ? Je ne sais pas par où commencer.

Réponse acceptée :

Utiliser while read boucle :

: > another_file  ## Truncate file.

while IFS= read -r LINE; do
    command --option "$LINE" >> another_file
done < file

Une autre consiste à rediriger la sortie par bloc :

while IFS= read -r LINE; do
    command --option "$LINE"
done < file > another_file

Le dernier est d'ouvrir le fichier :

exec 4> another_file

while IFS= read -r LINE; do
    command --option "$LINE" >&4
    echo xyz  ## Another optional command that sends output to stdout.
done < file

Si l'une des commandes lit l'entrée, ce serait une bonne idée d'utiliser un autre fd pour l'entrée afin que les commandes ne la mangent pas (ici en supposant ksh , zsh ou bash pour -u 3 , utilisez <&3 à la place portable):

while IFS= read -ru 3 LINE; do
    ...
done 3< file

Enfin pour accepter les arguments, vous pouvez faire :

#!/bin/bash

FILE=$1
ANOTHER_FILE=$2

exec 4> "$ANOTHER_FILE"

while IFS= read -ru 3 LINE; do
    command --option "$LINE" >&4
done 3< "$FILE"

Lequel pourrait s'exécuter en tant que :

bash script.sh file another_file

Idée supplémentaire. Avec bash , utilisez readarray :

readarray -t LINES < "$FILE"

for LINE in "${LINES[@]}"; do
    ...
done

Remarque :IFS= peut être omis si cela ne vous dérange pas que les valeurs de ligne soient supprimées des espaces de début et de fin.


Linux
  1. Comment modifier les autorisations et les propriétaires via la ligne de commande

  2. Comment extraire le fichier tar.gz sous Linux à l'aide de la ligne de commande

  3. Comment ajouter des numéros de ligne aux fichiers texte sous Linux

  4. Comment passer un argument de ligne de commande dans un script shell ?

  5. Comment remplacer un fichier en jar par une ligne de commande sous Linux ?

Comment enregistrer la sortie de la commande Linux dans une image ou un fichier texte

Comment analyser ou afficher le code XML dans la ligne de commande Linux

Comment verrouiller un fichier texte sous Linux à l'aide de la commande flock

Comment imprimer des lignes dupliquées dans un fichier texte sous Linux

Comment envoyer un e-mail avec une pièce jointe à partir de la ligne de commande

Comment extraire le fichier Tar.xz sur la ligne de commande Linux