使用 awk 结果作为另一个命令的参数

Kur*_*aze 4 bash awk shell-script

我正在使用 awk 从一组文本文件中提取行。文件如下所示:

1000    1    75
1000    2    76
1001    1    76
1001    2    80
Run Code Online (Sandbox Code Playgroud)

我正在使用此命令搜索其中的几个目录:

awk -F"\t" '$3 == "76" { print $1"\t"$2}' ../benchmark/*/labels.txt
Run Code Online (Sandbox Code Playgroud)

awk 给了我正确的输出:

1000    2
1001    1
Run Code Online (Sandbox Code Playgroud)

现在对于每个找到的行,我必须执行一个脚本,将这两个数字作为参数传递,如下所示:

./build.oct 1000    2
Run Code Online (Sandbox Code Playgroud)

这样做的正确方法是什么?我并不真正关心脚本控制台输出(它生成文件)。

Tim*_*imP 5

您还可以使用xargs-l使其为每一行运行一个单独的命令):

timp@helez:~/tmp$ awk -F"\t" '$3 == "76" { print $1"\t"$2}' test.txt | xargs -l ./build.oct 
$1 is  1000  and $2 is  2
$1 is  1001  and $2 is  1

timp@helez:~/tmp$ cat test.txt
1000    1   75
1000    2   76
1001    1   76
1001    2   80
timp@helez:~/tmp$ cat build.oct
echo '$1 is ' $1 ' and $2 is ' $2
Run Code Online (Sandbox Code Playgroud)

正如评论建议你也可以简化awk命令,因为这两个awkxargs分割在两个标签和空格:

timp@helez:~/tmp$ awk '$3 == "76" {print $1,$2}' test.txt | xargs -l ./build.oct
$1 is  1000  and $2 is  2
$1 is  1001  and $2 is  1
Run Code Online (Sandbox Code Playgroud)