Bash Scripting- Grep / Awk输出作为另一个脚本的输入

时间:2014-10-01 05:12:28

标签: linux bash shell loops awk

我有一个针对文件运行的脚本,该脚本接受来自用户的参数,并通过grep和awk发送以获取所需的列。它将返回多行。我想要做的是通过grep | awk的输出读取(或类似的东西)并通过另一个脚本(./lookup)运行它。我的问题是如何遍历每一行并通过脚本中的脚本运行该行的内容。希望这是有道理的,我是脚本和Linux的新手。

#!/bin/sh
x=$(grep "$*" "$c"|awk '{print $6}')
while read LINE   
do
./lookup $x
done

这似乎有效但仅适用于输出的第一行。它还要求我按Enter键以获取./lookup脚本的输出。任何想法或帮助?谢谢!

2 个答案:

答案 0 :(得分:1)

grepawk的输出传递给循环:

grep "$*" "$c" | awk '{print $6}' | while read LINE
do
    ./lookup "$LINE"
done
顺便说一句,由于grep可以进行正则表达式匹配,因此通常不需要同时使用awkawk。所以你可以写:

awk -v re="$*" '$0 ~ re {print $6}' "$c" | while ...

-v选项设置awk变量,~运算符执行正则表达式匹配。 $0指的是整个输入行。

答案 1 :(得分:1)

您也可以使用xargs而不是循环

同样正如barmar所说,不需要grep。

awk -va="$*" '$0~a{print $6}' "$C" | xargs ./lookup