1

如何将 shell 变量传递给 awk,设置它,在同一行的另一个 awk 中使用它并打印它?

我想先将 0 美元(所有字段)保存到一个变量中,解析 6 美元(ABC 123456M123000) - 获取“12300”,对其进行范围检查,如果满足,则打印所有字段(0 美元)

第 1 部分:我正在尝试做:

line="hello"
java class .... | awk -F, -v '{line=$0}' | awk 'begin my range check code' | if(p>100) print $line }

第 2 部分: $6="ABC 123456M123000" (我将解析的字符串)一旦我将所有字段存储到一个变量中,我可以使用以下方法解析 $6:

awk 'begin {FS=" "} { print $2; len=length($2); p=substr($2,8,len)+0 ; print len,p ; if(p>100) print $line }'

但我的问题在第 1 部分:如何将 $0 存储到变量中,以便在检查完成后,我可以打印它们?

4

2 回答 2

2

目前尚不清楚为什么需要多次调用awk. 根据您的描述,您似乎只是想这样做:

... | awk -F, '{split( $6, f, "M" )} f[2] > min' min=100

或者,如果您不能在 'M' 上拆分但需要使用 substr (或其他一些方法来提取所需的值):

... | awk -F, '{ split( $6, f, " " )} 0+substr( f[2], 8 ) > min' min=100
于 2012-12-12T17:36:03.420 回答
0

使用外壳:

java ... | while IFS= read -r line ; do
    sixth=$(IFS=,; set -- $line; echo "$6")
    val=${sixth:11}
    (( $val > 100 )) && echo "$line"
done

那里有一些 bash-isms。

于 2012-12-13T00:07:27.240 回答