
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 $word1
y el resto de la línea en $word2
.
La entrada para read
viene dada por la entrada del while
comando compuesto, que la obtiene del archivo mediante una redirección.
La -r
opción para read
impedir 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 printf
una cadena de formato de %.3d\n
:
printf '%.3d\n' "$counter"
... en lugar de echo "$counter"
.
Para obtener una descripción de lo que %.3d\n
significa, 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).