我有一个针对文件运行的脚本,该脚本接受来自用户的参数,并通过grep和awk发送以获取所需的列。它将返回多行。我想要做的是通过grep | awk的输出读取(或类似的东西)并通过另一个脚本(./lookup)运行它。我的问题是如何遍历每一行并通过脚本中的脚本运行该行的内容。希望这是有道理的,我是脚本和Linux的新手。
#!/bin/sh
x=$(grep "$*" "$c"|awk '{print $6}')
while read LINE
do
./lookup $x
done
这似乎有效但仅适用于输出的第一行。它还要求我按Enter键以获取./lookup脚本的输出。任何想法或帮助?谢谢!
答案 0 :(得分:1)
将grep
和awk
的输出传递给循环:
grep "$*" "$c" | awk '{print $6}' | while read LINE
do
./lookup "$LINE"
done
顺便说一句,由于grep
可以进行正则表达式匹配,因此通常不需要同时使用awk
和awk
。所以你可以写:
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