根据命令结果创建一个表

时间:2014-07-29 15:33:49

标签: shell unix

我要做的是从输出日志中获取一些行,将数据拆分为不同的列,如品牌,产品,数量等...可以获得这3列获取的所有信息从我们的日志中使用

grep 'ITEMS_SOLD Today' /tmp/$$.items

此命令会产生类似

的结果
XXXXXXXX ITEMS_SOLD Today for XXXX "brandname"."productname1" XXXX items sold : 123. 
XXXXXXXX ITEMS_SOLD Today for XXXX "brandname"."productname2" XXXX items sold : 345.
XXXXXXXX ITEMS_SOLD Today for XXXX "brandname"."productname3" XXXX items sold : 678.

现在我想从这些行获取我的列的输入(可以有N行)并创建一个表结构,我可以通过mail.Position“brandname”。“productname”是第11和数量(例如123)从该行的开头是第18位。

我要求的结果是

*Brand  Product  Quantity*

Brand  product1    123
Brand  product2    345
Brand  product3    567

我可以通过删除引号和分隔符“。”拆分“Brandname.productname”。

var=`grep 'ITEMS_SOLD Today' /tmp/$$.items |awk '{gsub(/["]/, "", $11);sub(/\./, " ", $11);print $11}'`
echo "$var"

结果是

Brand product1
Brand Product2
Brand product3

quantity=`grep 'ITEMS_SOLD Today' /tmp/$$.items |awk '{print $18}'`
echo "quantity"

结果是

123
345
678

但我不确定如何投入使用。请帮助我。

1 个答案:

答案 0 :(得分:4)

awk -F\" -v OFS='|' 'BEGIN { print "*Brand", "Product", "Quality*"} { sub(/.* : /, "", $5); sub(/[.]/, "", $5); print $2, $4, $5 }' file | column -t -s '|'

输出:

*Brand     Product       Quality*
brandname  productname1  123
brandname  productname2  345
brandname  productname3  678
  • 使用column -t进行格式化比使用printf更好。
  • 如果您不需要标题,请移除BEGIN { print "*Brand", "Product", "Quality*"}