![查找一列中的值并打印另一列中的相应值](https://linux22.com/image/80039/%E6%9F%A5%E6%89%BE%E4%B8%80%E5%88%97%E4%B8%AD%E7%9A%84%E5%80%BC%E5%B9%B6%E6%89%93%E5%8D%B0%E5%8F%A6%E4%B8%80%E5%88%97%E4%B8%AD%E7%9A%84%E7%9B%B8%E5%BA%94%E5%80%BC.png)
我有文本文件,其值为:
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$
.