Maneira compacta de obter campos separados por tabulações em variáveis

1

No Bash, estou lendo campos de uma linha em uma matriz. Deixe-me enfatizar que o desempenho é um problema, por isso não posso pagar nada que gerencie subprocessos.

Para tornar o código mais legível, quero que os campos sejam variáveis: $width é mais legível que ${array[0]} . Eu tenho que definir manualmente cada uma das variáveis, assim, o que é muita repetição:

while read line; do

  array=($line)
  width=${array[0]}
  height=${array[1]}
  size=${array[2]}
  date=${array[3]}
  time=${array[4]}

  # use $width, $height, etc. in script

done < file

Existe alguma maneira compacta de fazer isso, como a diretiva list no PHP?

list($width, $height, $size, $date, $time) = $array;
    
por forthrin 05.04.2018 / 19:07

1 resposta

8

Sim:

while read -r width height size thedate thetime; do
    # use variables here
done <file

Isto irá ler a entrada padrão e dividir os dados em espaços em branco (espaços ou tabulações). A última variável obterá todos os dados "restantes" (se houver mais campos do que variáveis lidas). Isto é em vez de lendo na variável line .

Eu usei nomes de variáveis thedate e thetime em vez de date e time que são nomes de utilitários.

Para dividir a linha em apenas guias , defina IFS como uma guia para read :

IFS=$'\t' read -r width ...etc...

Veja também:

por 05.04.2018 / 19:19

Tags