extrai informações de um arquivo com loop

1

Eu preciso de ajuda :) Eu tenho um arquivo como este:

AA BC FG

RF TT GH

DD FF HH

(alguns números de linhas e três colunas) e eu quero colocar as letras de cada coluna em uma variável passo a passo, a fim de dar-lhes como entrada em outro script. Então eu gostaria de obter:

para o loop de 1 °:

var1 = AA
var2 = BC
var3 = FG

para o loop de 2 °:

var1 = RF
var2 = TT
var3 = GH

para o loop de 3 °:

var1 = DD
var2 = FF
var3 = HH
    
por pingu 08.11.2016 / 17:19

2 respostas

3

Se o arquivo tiver exatamente 3 itens separados por espaço em branco em cada linha (sem linhas em branco, por exemplo), você poderá usar um simples while ... read loop:

while read -r var1 var2 var3; do
  ./otherscript "$var1" "$var2" "$var3"
done < "file"

Se houver linhas em branco, provavelmente você deve ler linhas completas e analisar apenas as não vazias, por exemplo,

while IFS= read -r line; do
  if [[ -n "$line" ]]; then 
    read -r var1 var2 var3 <<< "$line"
    ./otherscript "$var1" "$var2" "$var3"
  fi
done < "file"
    
por steeldriver 08.11.2016 / 19:12
0

Considerando que seu arquivo de entrada fornece apenas argumentos para o script, o xargs é uma opção razoável nessa situação. Vamos pegar este script como exemplo:

#!/bin/bash
echo "This is a test"
echo "var1 is $1 " "var 2 is $2 " "var 3 is $3"

Podemos usar xargs com -L1 para obter 1 linha no arquivo como argumentos e --arg-file para especificar o arquivo que contém esses argumentos. Assim:

$ xargs -L 1 -r --arg-file=input.txt ./somescript.sh 
This is a test
var1 is AA  var 2 is BC  var 3 is FG
This is a test
var1 is RF  var 2 is TT  var 3 is GH
This is a test
var1 is DD  var 2 is FF  var 3 is HH

Observe a opção -r , que impede que xargs execute o script em linhas em branco, que estão contidas no exemplo do arquivo de entrada.

    
por Sergiy Kolodyazhnyy 12.06.2018 / 06:25