seleciona dados com base no valor de um campo

0

Eu tenho um arquivo com várias entradas fornecendo IDs e outro arquivo com outras entradas subdivididas em campos diferentes separados por uma TAB. Eu preciso selecionar os registros do segundo arquivo com base no valor correspondente do primeiro arquivo. Eu vi na web que o AWK é a ferramenta certa (embora provavelmente o GREP seja mais simples), mas eu não recebo nenhuma saída.

Para este exemplo, usei matrizes mais do que arquivos, mas para usar o awk eu tive que criar um arquivo temporário. Em essência, preciso combinar o terceiro campo do segundo arquivo (var2) com o valor fornecido pelo primeiro arquivo (var1). O formulário de seleção var2 deve ser: "shameText \ t someWhat \ t beta \ tisIs", do qual eu imprimo somente o primeiro campo, então a saída deve ser simplesmente: "shameText". Eu poderia ter perdido o caminho certo para atribuir matrizes, mas de qualquer maneira este exemplo é apenas um proxy para a correspondência real em arquivos.

A questão é: como selecionar uma linha (registro) ou um único campo com base em uma correspondência entre um campo e o valor de uma variável?

Exemplo:

var1="alpha beta gamma delta epsilon"
var2="
'someText somethingElse zeta  someMore'
'sameText someElse  kappa andMore'
'shameText  someWhat  beta  thatIs'
'shortText  moreElse  theta andMore'"
echo $var2 > tempFile
for i in $var1
do
  printf "i is: %s\n" $i
  awk -F\t '$3 == "$i" {print $1}' tempFile
  echo "next item"
done
rm tempFile
    
por Gigiux 24.11.2017 / 15:00

1 resposta

0

Uma solução mais simples de awk poderia comparar US $ 3 com uma regex.

awk '$3 ~ /alpha|beta|gamma|delta|epsilon/ {print $1}' tempFile

Passando a lista como $var1

awk '$3 ~ /'"${var1// /|}"'/ {print $1}' tempFile

Se $ var1 é um arquivo, você poderia passá-lo para awk com cat

awk '$3 ~ /'"$(cat IDs|tr ' ' '|')"'/ {print $1}' tempFile

    
por 25.11.2017 / 01:04