【发布时间】:2014-06-18 02:49:18
【问题描述】:
我希望从基于“列”的格式中解析数据。我遇到了一些问题,我觉得我正在“破解”bash/awk 命令来提取字符串和数字。如果数字/文本以不同的格式出现,则脚本可能会意外失败,并且会出现错误。
数据:
RSSI (dBm): -86 Tx Power: 0
RSRP (dBm): -114 TAC: 4r5t (12341)
RSRQ (dB): -10 Cell ID: efefwg (4261431)
SINR (dB): 2.2
我的方法:
使用 bash 和 awk
#!/bin/bash
DATA_OUTPUT=$(get_data)
RSSI=$(echo "${DATA_OUTPUT}" | awk '$1 == "RSSI" {print $3}')
RSRP=$(echo "${DATA_OUTPUT}" | awk '$1 == "RSRP" {print $3}')
RSRQ=$(echo "${DATA_OUTPUT}" | awk '$1 == "RSRQ" {print $3}')
SINR=$(echo "${DATA_OUTPUT}" | awk '$1 == "SINR" {print $3}')
TX_POWER=$(echo "${DATA_OUTPUT}" | awk '$4 == "Tx" {print $6}')
echo "$SINR"
echo ">$SINR<"
但是上面的输出结果很奇怪。
2.2 # thats fine!
<2.2 # what??? expecting >4.6<
像这样的小事情让我对使用 awk 和 bash 解析数据产生疑问。我应该使用 C++ 还是其他语言?或者有更好的方法吗?
谢谢
【问题讨论】:
-
我无法重现该问题。另外,您的问题到底是什么,打印
<$var>或解析数据或两者兼而有之? -
您熟悉哪些语言?你在什么环境工作(什么样的数据?上面的简单数据,数据库中的大量数据,科学数据等)。这有助于更好地回答您的问题。
-
您可能还想通过programmers.stackexchange.com 提出您的问题,这似乎更适合解决如此广泛的问题。
-
您应该
echo $DATA_OUTPUT以确保它包含您所期望的内容。 -
另外,请确保您的示例正确:未提供
get_data(我使用了cat $1),您的输出应该是2.2,而不是4.6(参见输入)。就目前而言,就像上面的 JS 一样,我无法重现您的结果。