usando loop “for” leu um arquivo linha por linha continuamente considerando cada linha como uma entrada

1

Considere um arquivo file.txt com valores abaixo

one,two
three,four
five,six
six,seven
red,tree

Precisa de um comando shell script para executar a atividade abaixo

  1. Para o loop em que o loop deve ser executado continuamente com o maior número de linhas, o arquivo.txt tem
  2. Em cada execução de loop, a respectiva linha deve ser considerada uma entrada para a execução.

Por exemplo, na execução do primeiro loop, "one" deve ser armazenado em uma variável e "two" deve ser armazenado em outra variável para que ele use os valores da variável em execução

Input1="one"
Input2="two"

Similarmente para a execução de segunda linha, "three" deve ser armazenado em uma variável e "four" deve ser armazenado em outra variável como abaixo

Input1="three"
Input2="four"
    
por user8554534 07.10.2017 / 21:31

2 respostas

4

while IFS=, read -r input1 input2; do
    # do stuff with "$input1" and "$input2"
done <file.txt

A definição de IFS para uma vírgula para o comando read fará com que divida cada linha de entrada por vírgulas. Os dois campos da linha serão lidos em input1 e input2 .

Se houver mais campos do que dois em qualquer linha, os dados "restantes" serão colocados em input2 .

Dependendo do que você deseja fazer com os dados, isso pode ou não ser uma boa ideia. Veja Por que usar um shell loop para processar texto considerado uma prática ruim?

Você notará que awk é particularmente útil para analisar dados como este, sem a necessidade de um loop:

$ awk -F, '{ printf("Line %d:\n\tField 1 = %s\n\tField 2 = %s\n", NR, $1, $2) }' file.txt
Line 1:
        Field 1 = one
        Field 2 = two
Line 2:
        Field 1 = three
        Field 2 = four
Line 3:
        Field 1 = five
        Field 2 = six
Line 4:
        Field 1 = six
        Field 2 = seven
Line 5:
        Field 1 = red
        Field 2 = tree
    
por 07.10.2017 / 21:49
3

Não está claro o que você está perguntando. Por que você precisa do arquivo inteiro em cada iteração?

Você precisa disso?

while IFS=, read -r Input1 Input2; do
    # do something with the variables
    echo "1=$Input1  2=$Input2"
done < file.txt
    
por 07.10.2017 / 21:49