我要做的是从输出日志中获取一些行,将数据拆分为不同的列,如品牌,产品,数量等...可以获得这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
但我不确定如何投入使用。请帮助我。
答案 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*"}
。