Iterando uma lista de tuplas ou nomes de um arquivo de texto

Iterando uma lista de tuplas ou nomes de um arquivo de texto

Eu tenho o seguinte comando em um script Linux.

#!/bin/bash

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

001 e ARG1 são essencialmente tuplas,

Existe uma maneira de mover essas tuplas para um arquivo de texto que eu possa carregar no forloop? tantos que eu salvaria um arquivo de texto como este

ARG1
ARG2
ARG3

ou

001 ARG1
002 ARG2
003 ARG3

E o roteiro seria

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

e obter o mesmo resultado?

também existe uma maneira de fazer com que 001 002 seja contado automaticamente? Da mesma forma que em python alguém poderia definir counter = 0 e counter+=1 e atribuir uma variável.

Responder1

Dadas duas palavras separadas por espaço ou tabulação em cada linha de um arquivo, como no segundo exemplo do arquivo de entrada:

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

Isso leria a primeira palavra de cada linha $word1e o restante da linha $word2.

A entrada para readé dada pela entrada do whilecomando composto, que a obtém do arquivo por meio de um redirecionamento.

A -ropção de readimpedir que ele seja interpretado \de alguma forma especial, caso esse caractere ocorresse na entrada.

Com uma única palavra por linha e um contador:

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

Isso aumentaria o contador em um em cada iteração (para cada linha lida textfile.txt).

Para obter um contador de três dígitos preenchido com zero, produza o contador usando printfuma sequência de formatação de %.3d\n:

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

... no lugar de echo "$counter".

Para obter uma descrição do que %.3d\nsignifica, consulte a documentação da função da biblioteca C printf( man 3 printf, o equivalente do shell usa principalmente a mesma string de formato).

informação relacionada