0

チャネルをスキャンするには、次の 2 つのコマンドを使用します。

awk 'BEGIN{while(" w_scan -c PL -x " | getline ) print >> "tmp" }'

awk 'BEGIN{while(" w_scan -I tmp -E 0 -t 3 -F " | getline) print >> "channels" }'

同じことをしたいのですが、コマンドは 1 つだけです。tmpへの書き込みをスキップするように単純化するには?

ご協力ありがとうございました。

編集:

このコマンドを試しましたが、うまくいきません:

awk 'BEGIN { while (" w_scan -c PL -x " | getline ){split($0, tab, RS) system( " w_scan -I \047" tab[1] "\047 -E 0 -t 3 -F " ">>" "channels" )}}'

結果エラー ->リンクの説明をここに入力

編集-1

このスクリプトを使用すると機能しません。

run.awk

BEGIN { 
  while (" w_scan -c PL -x " | getline ) {
    split($0, tab, RS) 
    system( " w_scan -I '\047'" tab[1] "'\047' -E 0 -t 3 -F >> channels" )
  }
}

結果エラー →ここにリンクの説明を入力

このスクリプトを使用すると、うまく機能します。

sh スクリプト

#!bin/bash
awk 'BEGIN{while(" w_scan -c PL -x " | getline ) print >> "tmp" }'
awk 'BEGIN{while(" w_scan -I tmp -E 0 -t 3 -F " | getline) print >> "channels" }'

結果 --> ここにリンクの説明を入力

4

1 に答える 1

2

BEGIN両方をブロックに貼り付けるだけです:

awk '
  BEGIN {
    while(" w_scan -c PL -x " | getline ) print >> "tmp"
    while(" w_scan -I tmp -E 0 -t 3 -F " | getline) print >> "channels"
  }
'

すべてを 1 行にまとめたい場合は、コマンドをセミコロンで区切ることができます。

awk 'BEGIN { while(" w_scan -c PL -x " | getline ) print >> "tmp"; while(" w_scan -I tmp -E 0 -t 3 -F " | getline) print >> "channels" }'

編集

両方のループでアクセスtmpしています。2 番目のループの前に and で記述されていることを確認してcloseくださいsync

run.awk

BEGIN {
  while(" w_scan -c PL -x " | getline ) 
    print >> "tmp"
  close("tmp")
  system("sync")
  while(" w_scan -I tmp -E 0 -t 3 -F " | getline) 
    print >> "channels"
}

次で実行します。

awk -f run.awk
于 2012-09-09T10:36:14.740 に答える