1

シェル変数を 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 }

part2: $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

It's not clear why you need multiple invocations of awk. From your description, it looks like you are just trying to do:

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

or, if you can't split on 'M' but need to use substr (or some other method to extract the desired value):

... | 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

そこにいくつかのバッシュイズムがあります。

于 2012-12-13T00:07:27.240 に答える