使用 AWK 获取第二列

使用 AWK 获取第二列

我似乎无法让 awk 命令获取第二列数据。

Bash 代码:

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

printf  "$filter_data \n"

$filter 变量是传递给 shell 脚本的 Download 或 Upload 的值。因此 awk 使用术语 Download 或 Upload 来搜索正确的行。

文件内容如下:

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

我只是想获取数字,而不是其他任何东西,例如51.1357.38

答案1

您需要对 awk 程序主体使用单引号,这样 awk 的变量就不会被 shell 扩展。以下是将 shell 变量传递到 awk 的方法:

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

答案2

另一种方法是让 shellawk通过继续赋值(临时)将变量放入 s 环境中:

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

请注意,在 shell 中执行赋值时不需要变量引用

相关内容