Shell 根据命令的结果创建表

Shell 根据命令的结果创建表,shell,unix,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"

我想做的是从输出日志中获取一些行,将数据拆分为不同的列,如品牌、产品、数量等。这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行),并创建一个表结构,我可以通过邮件发送该表结构。“brandname”。“productname”的位置是第11行,数量(例如123)是第18行

我要求的成绩是

*Brand  Product  Quantity*

Brand  product1    123
Brand  product2    345
Brand  product3    567
123
345
678
我可以通过删除引号和分隔符来拆分“Brandname.productname”

结果是

Brand product1
Brand Product2
Brand product3

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

*Brand  Product  Quantity*

Brand  product1    123
Brand  product2    345
Brand  product3    567
123
345
678
但我不知道怎么放进桌子里。请帮帮我

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
    更好
  • 如果不需要标题,请删除
    开始{打印“*品牌”、“产品”、“质量*”}
输出:

*Brand     Product       Quality*
brandname  productname1  123
brandname  productname2  345
brandname  productname3  678
  • 使用
    column-t
    进行格式化比使用
    printf
    更好
  • 如果不需要标题,请删除
    开始{打印“*品牌”、“产品”、“质量*”}

这是awk为前两列构建的,它工作正常,但第三列我没有得到想要的输出。在质量列中,我得到的是“XXXXXXXXX已售出物品:123”产品名称后的所有文本出现在第三列中。如果你能解释一下你是如何考虑2美元、5美元和5美元的,那会很有帮助。出售的零件
物品:
是否真的有空间?因为如果不是这样,
sub(/.*:/,“”,$5)
应该是
sub(/.*:/,“”,$5)
。每个字段或列都用
-F
指定。所需的列是第2列、第4列和第5列,分别为2美元、4美元和5美元$2和$4不需要重新格式化,但$5需要删除部分字符。我们使用
sub
。只有“Brandname”。“product”在引号内。行中的其他文本没有引号。售出的商品用空格分隔,但没有引号。而且售出的商品后面不紧跟商品名称。中间有一些文本。123(数量)是行中的最后一个字。你能试着得到最后一个字吗..这可能很简单。这是为前两列创建的
awk
,它工作正常,但第三列我没有得到想要的输出。在质量列中,我得到的是“XXXXXXXXXXXXX售出的物品:123”产品名称后面的所有文本都在第三列。如果你能解释一下你是如何考虑2美元、5美元和5美元的,那会很有帮助。出售的零件
物品:
是否真的有空间?因为如果不是这样,
sub(/.*:/,“”,$5)
应该是
sub(/.*:/,“”,$5)
。每个字段或列都用
-F
指定。所需的列是第2列、第4列和第5列,分别为2美元、4美元和5美元$2和$4不需要重新格式化,但$5需要删除部分字符。我们使用
sub
。只有“Brandname”。“product”在引号内。行中的其他文本没有引号。售出的商品用空格分隔,但没有引号。而且售出的商品后面不紧跟商品名称。中间有一些文本。123(数量)你能试着说最后一句话吗这可能很容易。