私は次の出力を持っています
root@root# adsl info --state|grep "Upstream rate"
Max: Upstream rate = 1120 Kbps, Downstream rate = 8948 Kbps
Bearer: 0, Upstream rate = 1021 Kbps, Downstream rate = 4095 Kbps
上記の出力の表は、
root@root# adsl info --state|grep "Upstream rate"
Max:<TAB>Upstream rate = 1120 Kbps, Downstream rate = 8948 Kbps
Bearer:<TAB>0, Upstream rate = 1021 Kbps, Downstream rate = 4095 Kbps
上記の出力をawkで解析したいと思います。デリメータは集計であり、,
だから私は試しました
adsl info --state|grep "Upstream rate"| awk -F'[ ,]' '{ print $1}'
しかし、それは戻ります
Max: Upstream
Bearer: 0
でも
adsl info --state|grep "Upstream rate"| awk -F'[\t,]' '{ print $1}'
戻り値
Max: Ups
Bearer: 0
私は期待しました:
Max:
Bearer:
-F
オプションに集計区切り文字を追加する必要があると思います。どうやってするか?
入力がおっしゃったとおりで、各行の最初の空白がタブ文字である場合、タブまたはカンマで区切られたフィールドの場合は次のようになります。
$ awk -F'[\t,]' '{print "$0 =",$0; for (i=1;i<=NF;i++) print "\t$"i,"=",$i}' file
$0 = Max: Upstream rate = 1120 Kbps, Downstream rate = 8948 Kbps
$1 = Max:
$2 = Upstream rate = 1120 Kbps
$3 = Downstream rate = 8948 Kbps
$0 = Bearer: 0, Upstream rate = 1021 Kbps, Downstream rate = 4095 Kbps
$1 = Bearer:
$2 = 0
$3 = Upstream rate = 1021 Kbps
$4 = Downstream rate = 4095 Kbps
入力に対して上記のコマンドを実行し、結果を投稿します。あなたが述べたようにあなたの入力がないことに代わるもの\t
はあなたのFSのが単なるプレーンとして扱われているということですt
。何が原因であるかは想像できませんが(sshでこれらすべてを実行している場合や、バックスラッシュが発生する前にバックスラッシュを解釈している場合を除く)、進行して実行する必要がある問題を見つける必要があります。上記のコマンドとcat -v
入力内容により、問題が何であるかが正確にわかります。
ビジーボックスからツールを入手していて、awkが何をサポートしているかわからないので、awkが壊れているかどうか疑問に思います。これを試して:
$ awk -F'['$'\t'',]' '{print "$0 =",$0; for (i=1;i<=NF;i++) print "\t$" i, "=", $i}' file
FSではリテラルのタブ文字を使用します-おそらくそれが違いを生むでしょう。
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加