查找一列中的值并打印另一列中的相应值

查找一列中的值并打印另一列中的相应值

我有文本文件,其值为:

1 Peter
2 Paul

我需要一个命令/脚本,它将作为第二列(例如 Paul)的参数值并返回第一列(2)的相应值。

我正在尝试使用 while 循环,但如何找到我需要的值:

while IFS= read -a line; do      
  printf "%s\n" "${line[@]}"     
done < "file.txt"

答案1

使用 GNU grep:

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

输出:

2

或使用 bash:

while read -r num name; do
  [[ $name == "Paul" ]] && printf "%s\n" "$num"
done < file

答案2

awk在这种情况下可能会派上用场:

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

或者交互方式:

$ awk 'BEGIN{printf "Name: "; getline name < "-"} $2 == name {print $1}' input.txt
Name: Paul
2

答案3

您可以先 grep 它,然后读取值,例如

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

如果您知道Paul是最后一列,请使用Paul$.

相关内容