awkコマンドから値を読み取るには?

awkコマンドから値を読み取るには?

結果ファイルがあり、「rxセル」の値を読み取る必要があります。レポートファイルは次のとおりです。 test.log ファイルの内容は次のとおりです。

    co_result=test.log  

    ZyXEL IES-1000> statistics port 12 0 33
    [adsl channel 12-0/33]
    tx packets: 56
    rx packets: 60
    tx rate   : 0
    rx rate   : 0
    tx cells  : 468
    rx cells  : 1707
    errors    : 0
    ZyXEL IES-1000>

rx セル値を読み取るには、次のコマンドを使用します。

    cells=$(grep -e 'cells' $co_result | cut -d: -f2 | awk '{print $1}'| awk 'NR%2{printf $0"";next;}1')
    echo "Var_value: $cells"

ただし、ファイルから上記の2つのコマンドを実行しようとすると問題が発生します。 echoの最初の数文字が表示されない次の出力を取得します。

       1707value: 530  

$cells変数には1707しかないと予想しましたが、エラーが印刷されました。問題を理解していません。問題を解決するのに役立ちますか?

ベストアンサー1

コマンドの置換は不必要に複雑です。

代わりに:

cells=$( awk '/rx cells/ { print $NF }' <"$co_result" )
printf 'Var_value: %s\n' "$cells"

$NF行に文字列が含まれている場合に印刷される行の最後のスペースで区切られたフィールドrx cells

また、入力ファイルがDOSテキストファイルではなくUnixテキストファイルであることを確認してください。このファイルを実行してdos2unixUnixテキストファイルに変換します。


コマンドを確認してください。

grep -e 'cells' $co_result | cut -d: -f2 | awk '{print $1}'| awk 'NR%2{printf $0"";next;}1'

まず、スペース、タブ、改行文字、その他の特殊文字(引用符で囲まれていないため)が含まれているとgrep -e 'cells' $co_result失敗します。$co_result

コマンド出力

tx cells  : 468
rx cells  : 1707

それから: cut -d: -f2。この出力

 468
 1707

それから: awk '{print $1}'。出力は上記と同じですが、初期スペースは削除されました。

それから: awk 'NR%2{printf $0"";next;}1'。これは混乱したアプローチpaste -d' ' - -と結果です。

468 1707

後者はecho出力されます

Var_value: 468 1707

この情報を取得できない理由は、入力ファイルがDOSテキストファイルであり、各行の末尾にキャリッジリターンが含まれているためです。したがって、カーソルは印刷後に行の先頭に戻ります468

dos2unix入力ファイルに使用してください。

どこから来たのか530わかりません。

おすすめ記事