-3
awk < MigStat.stat -F: '{ if ($a == "load")b=8; } $1 == "D0001" && FNR== '$c' {print $b}'

今、列 $b にある値を印刷したいのですが、この場合は行全体を印刷します。私がしたいのは、ifステートメントのbの値を使用して、その列の値を出力することです

4

2 に答える 2

2

値を渡すには、次の-vオプションを使用します。

awk -F: -v a=2 -v c=10 '$a=="load"{b=8}$1=="D0001"&&FNR==c{print $b}' MigStat

ノート:

  • 変数を渡すには、 の-vオプションを使用しますawk

  • awkリダイレクトを使用する必要のないファイルを読み取ります。

  • の構造はawkですcondition{block}

  • awk変数を初期化して、ブロックに設定されていない場合0は、行全体がどこにあるかになります。b$a=="load"{b=8}{print $b}{print $0}$0

于 2013-04-08T12:22:31.227 に答える
1

重複して割り当てる必要はありませんb=8。スクリプトがそこに投稿したようなものであれば、まったく必要ありません$b

$a, $cシェル変数の場合:

awk -F: -v a="$a" -v c="$c" 'a=="load"&&$1=="D0001"&&NR==c{print $8;exit}' MigStat.stat

awk がそれ以上の行を処理するのを停止するためのprint $8呼び出しの後で、より良い結果が得られます。exit;

于 2013-04-08T12:32:31.567 に答える