我有文本文件,其值为:
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$
.