我似乎无法让 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.13
和57.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 中执行赋值时不需要变量引用