Extrai uma string da chave, valor de um arquivo de texto e atribui a uma nova variável

0

Precisa de um script para percorrer o arquivo abaixo para ler chaves, valores e extrair valores, por exemplo. foo_key1, foo.com, / tmp / worker $ {Build_Number} fora da chave e os valores atribuem a outra variável (por exemplo, A="foo_key1", B="foo.com", C="/ tmp / worker $ { Build_Number} ").

cat abc.txt

foo_key1=foo.com|/tmp/worker${Build_Number}
foo_key2=goo.com|/tmp/manager${Build_Number}

Eu tentei o código abaixo, mas sem sorte.

while IFS== read -r key val ; do
    val=${val%\"}; val=${val#\"}; key=${key#export };
    A="$(cut -d'_' -f1 <<<"$key")"
    B="$(cut -d'_' -f1 <<<"$val")"
    C="$(cut -d'_' -f2 <<<"$val")"
    echo $A
    echo $B
    echo $C
  done < abc.txt

Resultado esperado:

foo_key1 
foo.com
/tmp/worker${Build_Number}
    
por itgeek 17.10.2018 / 04:38

3 respostas

1

Simplesmente use o awk para dividir em = ou | e imprima as 3 colunas, depois use read para atribuir as colunas às variáveis

awk -F '[=|]' '{print $1, $2, $3}' abc.txt | while read A B C; do
    echo $A
    echo $B
    echo $C
done

Além disso, você pode adicionar uma expressão regular antes das chaves para filtrar os dados, por exemplo '/\S+/ {print $1, $2, $3}' , isso usa uma expressão regular que corresponderá a mais de 1 caractere que não seja um espaço em branco, ignorando linhas em branco

    
por 17.10.2018 / 05:18
1

Você pode tentar:

while IFS='|=' read A B C ; do
  echo "$A"
  echo "$B"
  echo "$C"
done < abc.txt
    
por 17.10.2018 / 10:34
0

Seu código se beneficiaria com essas revisões:

#!/bin/bash

cat abc.txt | while IFS= read -r line ; do

A=$(echo $line | sed -e 's/=/ /g;s/|/ /g' |  awk '{print $1}')
B=$(echo $line | sed -e 's/=/ /g;s/|/ /g' |  awk '{print $2}')
C=$(echo $line | sed -e 's/=/ /g;s/|/ /g' |  awk '{print $3}')

    echo $A
    echo $B
    echo $C
  done

foo_key1
foo.com
/tmp/worker${Build_Number}
foo_key2
goo.com
/tmp/manager${Build_Number}
    
por 17.10.2018 / 05:03