Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/bash/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Bash 将两行的部分提取为一行_Bash_Awk_Sed_Grep - Fatal编程技术网

Bash 将两行的部分提取为一行

Bash 将两行的部分提取为一行,bash,awk,sed,grep,Bash,Awk,Sed,Grep,我想要一个可以转换此输入的命令行: capability: ESS Privacy ShortPreamble ShortSlotTime (0x0431) signal: -68.00 dBm last seen: 0 ms ago SSID: ENH202.FW Supported rates: 1.0* 2.0* 5.5* 11.0* 6.0 9.0 12.0 18.0 到该输出行: SSID: ENH202.FW -68.00 dBm 这是受

我想要一个可以转换此输入的命令行:

    capability: ESS Privacy ShortPreamble ShortSlotTime (0x0431)
    signal: -68.00 dBm
    last seen: 0 ms ago
    SSID: ENH202.FW
    Supported rates: 1.0* 2.0* 5.5* 11.0* 6.0 9.0 12.0 18.0
到该输出行:

SSID: ENH202.FW  -68.00 dBm
这是受以下读取可用wifi网络的命令启发:

sudo iw dev wlan0 scan | grep SSID
它通过打印包含“SSID”的单行的每次出现来列出所有网络。我想用同样的扫描给出每个SSID的信号强度


是否有方法使用命令行工具获取包含信号强度的列表

sed命令可以做到这一点:

sed -n -e '/signal:/h' -e '/SSID:/{G;s/signal://;s/\n//;p}' <inputfile>
sed-n-e'/signal:/h'-e'/SSID://{G;s/signal://;s/\n//;p}'
说明:

-n
标志告诉sed不要打印行


第一个
-e
表达式找到包含“signal:”的行,并将其放入保持空间。第二行找到一行,其中包含“SSID:”,
G
将保留空间追加到此行,
s/signal://
删除“signal:”部分,
s/\n/
删除回车符。最后,
p
告诉sed打印模式空间。

当到达信号线时,设置变量
st
的值,然后在SSID线后打印

sudo iw dev wlan0 scan | awk '/signal:/{st=$2$3} /SSID:/{print $0" "st}'

到目前为止你试过什么?你有什么问题?为我们提供一个。考虑到您包含的标记,我希望在您的问题中看到bash、awk和sed代码∞ 对问题中代码的改进,它是GNU专用的,因此在*BSD、macOS等中不起作用。您可以在
p
后面加一个分号,使它至少与BSD和macOS兼容。我对linux向导表示尊敬。