1

手头的任务:

我有一个包含四个制表符分隔值的文件:

peter 123   five   apples
jane  1234  four   rubberducks
jimmy 01234 seven  nicknames

我需要根据第二列从这个文件中取出一行,并且值在一个变量中。假设我将数字 123 存储在变量 foo 中。在 bash 我可以做

grep $'\s'$foo$'\s'

我摆脱了彼得的信息,没有别的。有没有办法在破折号或灰烬上实现相同的目标?

4

2 回答 2

0

如果您的文件足够小以至于在 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;考虑一下演示)。

于 2014-11-19T02:03:47.907 回答
0

你可以awk在这里使用:

var='1234'
awk -v var="$var" '$2 == var ""' f
jane  1234  four   rubberducks

PS:我正在var ""确保var将其视为字符串而不是数字。

于 2014-11-18T20:13:02.117 回答