手头的任务:
我有一个包含四个制表符分隔值的文件:
peter 123 five apples
jane 1234 four rubberducks
jimmy 01234 seven nicknames
我需要根据第二列从这个文件中取出一行,并且值在一个变量中。假设我将数字 123 存储在变量 foo 中。在 bash 我可以做
grep $'\s'$foo$'\s'
我摆脱了彼得的信息,没有别的。有没有办法在破折号或灰烬上实现相同的目标?
手头的任务:
我有一个包含四个制表符分隔值的文件:
peter 123 five apples
jane 1234 four rubberducks
jimmy 01234 seven nicknames
我需要根据第二列从这个文件中取出一行,并且值在一个变量中。假设我将数字 123 存储在变量 foo 中。在 bash 我可以做
grep $'\s'$foo$'\s'
我摆脱了彼得的信息,没有别的。有没有办法在破折号或灰烬上实现相同的目标?
如果您的文件足够小以至于在 shell 中进行迭代的效率低下并不重要,那么您实际上根本不需要这样做grep
。以下内容在任何符合 POSIX 的 shell 中都有效,包括 ash 或 dash:
var=123
while read -r first second rest; do
if [ "$second" = "$var" ]; then
printf '%s\t' "$first" "$second"; printf '%s\n' "$rest"
fi
done
(在实践中,我可能会在这里使用 awk;考虑一下演示)。
你可以awk
在这里使用:
var='1234'
awk -v var="$var" '$2 == var ""' f
jane 1234 four rubberducks
PS:我正在var ""
确保var
将其视为字符串而不是数字。