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
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"
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
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$
.