Iterando a través de una lista de tuplas o nombres de un archivo de texto

Iterando a través de una lista de tuplas o nombres de un archivo de texto

Tengo el siguiente comando en un script de Linux.

#!/bin/bash

for i in "001 ARG1" "002 ARG2" "003 ARG3"
do
    set -- $i
    echo $1
    echo $2
done

001 y ARG1 son esencialmente tuplas,

¿Hay alguna manera de mover esas tuplas a un archivo de texto que pueda cargar en el bucle for? Tantos que guardaría un archivo de texto como este.

ARG1
ARG2
ARG3

o

001 ARG1
002 ARG2
003 ARG3

Y el guión sería

for i in textfile.txt
do
    set -- $i
    echo $1
    echo $2
done

y obtener el mismo resultado?

¿También hay alguna manera de hacer que el 001 002 se cuente automáticamente? Por ejemplo, en Python se puede establecer contador = 0 y contador+=1 y asignar una variable.

Respuesta1

Dadas dos palabras separadas por espacios o tabulaciones en cada línea de un archivo como en el segundo ejemplo del archivo de entrada:

while read -r word1 word2; do
    echo "$word1"
    echo "$word2"
done <textfile.txt

Esto leería la primera palabra de cada línea en $word1y el resto de la línea en $word2.

La entrada para readviene dada por la entrada del whilecomando compuesto, que la obtiene del archivo mediante una redirección.

La -ropción para readimpedir que interprete \de alguna manera especial, si ese carácter apareciera en la entrada.

Con una sola palabra por línea y un contador:

counter=0
while read -r word; do
    counter=$(( counter + 1 ))
    echo "$counter"
    echo "$word"
done <textfile.txt

Esto incrementaría el contador en uno en cada iteración (para cada línea leída desde textfile.txt).

Para obtener un contador de tres dígitos con ceros, genere el contador usando printfuna cadena de formato de %.3d\n:

printf '%.3d\n' "$counter"

... en lugar de echo "$counter".

Para obtener una descripción de lo que %.3d\nsignifica, consulte la documentación de la función de la biblioteca C printf( man 3 printf, el equivalente de shell utiliza principalmente la misma cadena de formato).

información relacionada