使用bash从命令输出中提取数据字段

使用bash从命令输出中提取数据字段,bash,command,field,extract,Bash,Command,Field,Extract,在bash脚本中,我试图从命令的输出中提取一些数据字段(在我的例子中是iwconfig) 我想用收集的值创建一个csv文件。比如: Timestamp,BitRate,LinkQuality,SignalLevel,Missed beacon,... 1,270 Mb/s,100/100,-51 dBm,0,... 2,300 Mb/s,90/100,-43 dBm,0,... 这些字段在iwconfig的输出中用两个空格分隔。如果我能将IFS变量设置为两个空格,我的问题就会解决。但我不知道这

在bash脚本中,我试图从命令的输出中提取一些数据字段(在我的例子中是iwconfig)

我想用收集的值创建一个csv文件。比如:

Timestamp,BitRate,LinkQuality,SignalLevel,Missed beacon,...
1,270 Mb/s,100/100,-51 dBm,0,...
2,300 Mb/s,90/100,-43 dBm,0,...
这些字段在iwconfig的输出中用两个空格分隔。如果我能将IFS变量设置为两个空格,我的问题就会解决。但我不知道这是否有效。 你会怎么做?Awk还是sed


向您问好,回答您的问题:我会使用awk。不过,我可能会使用python和单个regexp来捕获字典中的所有参数

奖励:我已经使用gnu的grep在bash中完成了您想要做的事情(您需要的regexp可能会有所不同,因为iwconfig输出取决于设备):


我认为这是可行的:

  s=$(iwconfig $Interface)
  s=${s//          /  }
  s=${s//  /,}
  OIFS="$IFS"
  IFS=','
  arrIN=(${s//  /,})
  IFS=$OIFS

  for value in "${arrIN[@]}"; do
    echo Value: $value
  done
我得到这个输出:

Value: wlan0
Value:
Value: IEEE 802.11abgn
Value: ESSID:"Top Gear"
Value:
Value: Mode:Managed
Value: Frequency:2.452 GHz
Value: Access Point: F8:D1:11:71:56:B6
Value:
Value: Bit Rate=1 Mb/s
Value: Tx-Power=15 dBm
Value:
Value: Retry
Value: long limit:7
Value: RTS thr:off
Value: Fragment thr:off
Value: Encryption key:off
Value: Power Management:off
Value: Link Quality=49/70
Value: Signal level=-61 dBm
Value:
Value: Rx invalid nwid:0
Value: Rx invalid crypt:0
Value: Rx invalid frag:0
Value: Tx excessive retries:0
Value: Invalid misc:0
Value: Missed beacon:0
现在我可以直接用例如

${arrIN[6]#*":"}

sed听起来可以完成这项工作(假设字符串中的空格没有任何复杂的转义规则)。cut可能不适合使用,因为它的-d=DELIM需要一个分隔符,所以两个空格看起来像一个额外的字段。你能发布输入吗?请展示一些示例输入。然而,awk的默认字段分隔符是“空白”,所以这不是一个问题,它正好是2个空格。perl-pe“s///”(sed的所有功能都没有转义)不会出错。感谢您的回答!我将让awk试一试:-)我不知道iwconfig的输出依赖于设备。谢谢你的提示!也许我应该在前面解释一下:脚本将在empedded linux系统(Gumstix)上运行,我认为grep每次都会完全读取变量。因为我知道字段在哪里,所以我想到了使用数组。因此,我将输出逐字读取到数组中,可以直接访问特定字段,而无需反复读取变量的全部内容。
Value: wlan0
Value:
Value: IEEE 802.11abgn
Value: ESSID:"Top Gear"
Value:
Value: Mode:Managed
Value: Frequency:2.452 GHz
Value: Access Point: F8:D1:11:71:56:B6
Value:
Value: Bit Rate=1 Mb/s
Value: Tx-Power=15 dBm
Value:
Value: Retry
Value: long limit:7
Value: RTS thr:off
Value: Fragment thr:off
Value: Encryption key:off
Value: Power Management:off
Value: Link Quality=49/70
Value: Signal level=-61 dBm
Value:
Value: Rx invalid nwid:0
Value: Rx invalid crypt:0
Value: Rx invalid frag:0
Value: Tx excessive retries:0
Value: Invalid misc:0
Value: Missed beacon:0
${arrIN[6]#*":"}