【问题标题】:Using grep in Linux to get two strings and sort only based on one在 Linux 中使用 grep 获取两个字符串并仅基于一个排序
【发布时间】:2013-12-06 12:21:17
【问题描述】:

我的文件如下所示:

BSS 00:1a:1e:5b:8b:21 (on wlan0) -- associated
    TSF: 39741405897 usec (0d, 11:02:21)
    freq: 2437
    beacon interval: 100
    capability: ESS ShortPreamble ShortSlotTime (0x0421)
    signal: -71.00 dBm
    last seen: 104 ms ago
    Information elements from Probe Response frame:
    ...
    ...
    ... 
BSS 00:1c:1c:5a:8e:23 (on wlan0)
    TSF: 397414345497 usec (0d, 11:02:21)
    freq: 2433
    beacon interval: 100
    capability: ESS ShortPreamble ShortSlotTime (0x0421)
    signal: -76.00 dBm
    last seen: 104 ms ago
    Information elements from Probe Response frame:
    ...
    ...
    ...

等等。 (基本上就是iw dev wlan0 scan的输出)。

现在我只想得到BSS 00:1a:1e:5b:8b:21signal: -72.00 dBm(在同一行),并且应该根据signal 部分对行进行排序。任何人都可以帮助我使用我应该使用的 grep 命令吗?

谢谢。

【问题讨论】:

  • 听起来您还希望将这两行连接成一条记录。对吗?
  • 是的,完全正确...像这样:BSS 00:1a:1e:5b:8b:21(在 wlan0 上)信号:-72.00 dBm,BSS 00:1b:1e:5b:8b: 23 信号:-73.00 dBm 等...

标签: linux unix terminal grep


【解决方案1】:

尝试使用awk,后跟sort

awk '/^[ ]*BSS/ {p=1; a=$1" "$2} p && /^[ ]*signal/ {p=0; a=a" "$0; print a}' file | sort -n -k4

示例输入文件的输出

BSS 00:1c:1c:5a:8e:23     signal: -76.00 dBm
BSS 00:1a:1e:5b:8b:21     signal: -71.00 dBm

【讨论】:

  • 感谢您的回答,但它不起作用:(我已经更新了问题,详细说明了我的文件的外观。请检查它。因此我不确定如何确定哪个BSS 列和信号部分属于使用 awk 命令。如果您无法正确看到问题中的格式,请在安装了 Ubuntu 的情况下在终端尝试此命令:'sudo iw dev wlan0 scan'
  • @SrikanthKandalam 请检查更新的答案。只需要照顾领先的空间。
  • @SrikanthKandalam 该命令给了我 nl80211 not found. 错误,因此无法对其进行测试,但可以正常使用您更新的输入问题
猜你喜欢
  • 2018-05-18
  • 1970-01-01
  • 1970-01-01
  • 2017-12-28
  • 1970-01-01
  • 1970-01-01
  • 2017-09-13
  • 2019-11-02
  • 2021-11-02
相关资源
最近更新 更多