使用grep / awk / UNIX以列格式解析库存和价格的日志

时间:2015-06-25 19:18:13

标签: bash unix awk grep

我有一个包含交易信息的修复日志,例如:

  ==>  8=FIX4.2|39=1|55=IBM|6=138  
  ==>  8=FIX4.2|39=1|55=APPL|6=130  
  ==>  8=FIX4.2|39=1|55=GE|6=11  

我试图grep输出,以便我可以得到这样的东西:

 IBM    138  
 APPL   130   
 GE     11  

其中第一列是IBM,第二列是138。

我正在尝试这个:

grep 39=1 some.log | tr "|" "\n" | egrep '(^55=|^6=)' 

但这只会在不同的行上获得股票/价格,如下所示:

IBM
AAPL
GE
138
130
11

是否有bash / unix one liner会得到这个?

4 个答案:

答案 0 :(得分:2)

试试这个:

awk -F '[|=]' '{printf "%-6s %s\n", $8, $10}' file

输出:

IBM    138
APPL   130
GE     11

答案 1 :(得分:1)

您可以使用awk

awk -F '(55|6)=' -v OFS='\t' '{sub(/\|$/, "", $2); print $2, $3}' file
IBM     138
APPL    130
GE      11

答案 2 :(得分:0)

GNU grep and paste:

grep -oP '\b(55|6)=\K[^|]+' file | paste  - -

答案 3 :(得分:0)

你可以试试这个:

use std::fmt as f;

impl f::Display for Something {
    fn fmt(&self, f: &mut f::Formatter) -> f::Result {
        write!(f, "{}", self.count)
    }
}