Encontre o valor em uma coluna e imprima o valor correspondente de outro

2

Eu tenho um arquivo de texto com valores como:

1 Peter
2 Paul

Eu preciso de um comando / scipt que tome como um valor de parâmetro da segunda coluna (por exemplo, Paul) e retorne o valor correspondente do primeiro (2).

Estou tentando usar o loop while, mas como posso encontrar o valor de que preciso:

while IFS= read -a line; do      
  printf "%s\n" "${line[@]}"     
done < "file.txt"
    
por Giperboloid 23.12.2015 / 21:02

3 respostas

3

Com o GNU grep:

grep -Po ".* (?=Paul)" file

Saída:

2

ou com bash:

while read -r num name; do
  [[ $name == "Paul" ]] && printf "%s\n" "$num"
done < file
    
por 23.12.2015 / 21:07
2

awk pode ser útil nesse cenário:

$ awk '$2 == "Paul" {print $1}' input.txt
2

Ou interativamente:

$ awk 'BEGIN{printf "Name: "; getline name < "-"} $2 == name {print $1}' input.txt
Name: Paul
2
    
por 23.12.2015 / 22:00
0

Você pode usá-lo primeiro e depois ler os valores, por exemplo

grep -w Paul file.txt | while read v k; do echo $v; done

Se você sabe que Paul é a última coluna, use Paul$ .

    
por 10.04.2016 / 05:09