如何在灰烬或短划线脚本中使用带有grep的制表符分隔符?

时间:2014-11-18 19:50:23

标签: bash shell scripting dash-shell ash

手头的任务:

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

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

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

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

我离开了彼得的信息而没有别的。有没有办法在仪表板或灰烬上达到相同的效果?

2 个答案:

答案 0 :(得分:0)

您可以在此处使用awk

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

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

答案 1 :(得分: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;考虑一下这个演示)。