web-dev-qa-db-ja.com

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

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

バッシュコード:

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

printf  "$filter_data \n"

$ filter変数は、シェルスクリプトに渡されるダウンロードまたはアップロードの値です。そのため、awkは「ダウンロード」または「アップロード」という用語を使用して適切な行を検索します。

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

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

51.1357.38など、数値のみを取得し、他の何も取得しようとはしていません。

9
Vlad

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

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

別の方法は、シェルに割り当てを進めることで変数をawks環境に入れさせることです(一時的):

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

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

7