【发布时间】:2020-05-19 23:26:32
【问题描述】:
我正在使用 find 来搜索文件。然后我将此文件作为 grep 的参数传递。我想在每个结果上运行 awk 脚本?我该怎么做?
可以这么说,find 返回 5 个文件,每个文件上的 grep 返回 15 行,在这 15 行上,我想运行 awk 脚本。
我试过了,但是出错了
find . -type f -name test.log | xargs grep -A 15 "Data starts now" | xargs awk -f postprocess.awk
任何人都可以建议语法有什么问题吗?
假设文件 test1.log 是
num1 104
num2 434
Num3 572
Data starts now
num1 04
num2 34
Num3 72
假设文件 test2.log 是
num1 203
num2 135
Num3 098
Data starts now
num1 17
num2 33
Num3 89
假设文件 test3.log 是
num1 924
num2 834
Num3 532
Data starts now
num1 34
num2 63
Num3 89
postprocess.awk 是
{
if($1=="num1")
{
num1_value =$2;
}
if($1=="num2")
{
num2_value =$2;
}
if($1=="num3")
{
num3_value =$2;
}
}
END {
mult=num1_value*num2_value;
print "Multiplication is " mult;
}
如果我跑
find . -type f -name "test*.log" -exec grep -A15 "Data starts now" {} + | awk -f postprocess.awk
我应该得到 3 个输出,但只得到 1 行错误的结果
Multiplication is 0
【问题讨论】:
-
我提供了this answer,它使用 GNU awk 完成一切