使用 AWK 获取第二列

Vla*_*lad 9 bash grep sed awk

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

重击代码:

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

printf  "$filter_data \n"
Run Code Online (Sandbox Code Playgroud)

$filter 变量是传递到 shell 脚本的 Download 或 Upload 的值。所以 awk 使用术语下载或上传来搜索正确的行。

文件内容为:

Testing download speed................................................................................
Download: 51.13 Mbit/s
Testing upload speed................................................................................................
Upload: 57.38 Mbit/s
Run Code Online (Sandbox Code Playgroud)

我试图只得到数字而不是其他任何东西,例如,51.1357.38.

gle*_*man 13

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

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


Ser*_*nyy 7

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

re=$filter  awk  '$0 ~ ENVIRON["re"] {print $2}'  input.txt
Run Code Online (Sandbox Code Playgroud)

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