GNU/Linux >> Tutoriales Linux >  >> Linux

¿Cómo analizar cada línea de un archivo de texto como un argumento para un comando?

Estoy buscando escribir un script que tome un .txt filename como argumento, lee el archivo línea por línea y pasa cada línea a un comando. Por ejemplo, ejecuta el comando command --option "LINE 1" , luego command --option "LINE 2" , etc. La salida del comando se escribe en otro archivo. ¿Cómo hago para hacer eso? No sé por dónde empezar.

Respuesta aceptada:

Usa while read bucle:

: > another_file  ## Truncate file.

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

Otra es redirigir la salida por bloque:

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

Lo último es abrir el archivo:

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 uno de los comandos lee la entrada, sería una buena idea usar otro fd para la entrada para que los comandos no lo coman (aquí asumiendo que ksh , zsh o bash para -u 3 , usa <&3 en lugar portable):

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

Finalmente para aceptar argumentos, puedes hacer:

#!/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"

¿Cuál podría ejecutarse como:

bash script.sh file another_file

Idea adicional. Con bash , usa readarray :

readarray -t LINES < "$FILE"

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

Nota:IFS= se puede omitir si no le importa tener los valores de línea recortados de los espacios iniciales y finales.


Linux
  1. Cómo cambiar permisos y propietarios a través de la línea de comandos

  2. En Bash, ¿cómo agrego una cadena después de cada línea en un archivo?

  3. Cómo editar un archivo de texto en mi terminal

  4. ¿Cómo crear un archivo con el nombre de un argumento de línea de comando?

  5. ¿Cómo ocultar una contraseña pasada como argumento de línea de comando?

Cómo guardar la salida del comando de Linux en una imagen o un archivo de texto

Cómo analizar o ver el código XML en la línea de comandos de Linux

Cómo bloquear un archivo de texto en Linux usando el comando flock

Cómo imprimir líneas duplicadas en un archivo de texto en Linux

Cómo enviar un correo electrónico con un archivo adjunto desde la línea de comandos

Cómo extraer el archivo Tar.xz en la línea de comandos de Linux