AWKを使用して2番目の列を取得する


9

データの2番目の列を取得するawkコマンドを取得できないようです。

バッシュコード:

filter_data=$(awk "{if(/$filter:/) print $2}" < scanresults_temp.txt)

printf  "$filter_data \n"

$ filter変数は、シェルスクリプトに渡されるDownloadまたはUploadの値です。したがって、awkはDownloadまたはUploadという用語を使用して、適切な行を検索します。

ファイルの内容は次のとおりです。

Testing download speed................................................................................
Download: 51.13 Mbit/s
Testing upload speed................................................................................................
Upload: 57.38 Mbit/s

私は、数字だけではなく他の何かを取得しようとEX、午前51.1357.38


2
すぐに印刷するのに、なぜ変数に保存するのですか?awk「s」を使用するだけprintf
セルギーコロディアズニー

回答:


13

awkの変数がシェルによって展開されないように、awkプログラム本体には一重引用符を使用する必要があります。シェル変数をawkに渡す方法は次のとおりです。

filter_data=$( awk -v re="$filter:" '$0 ~ re {print $2}' scanresults_temp.txt )

7

別の方法は、awk割り当てを続行することにより、シェルに変数をs環境に配置させることです(一時)。

re=$filter  awk  '$0 ~ ENVIRON["re"] {print $2}'  input.txt

シェルで割り当てを実行する場合、変数の引用は必要ないことに注意してください

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.