使用shell绘制信息表

时间:2014-02-01 19:39:00

标签: shell awk

我在txt文件中获得了以下数据,

Apple:Fruit:20:30
Leek:Vegetable:40:50

在表格中,(项目描述):(项目类别):(数量):(价格)。如何使用shell脚本绘制表格。有输出

Item Description           Category          Qty       Price        Total Sales
--------------------------------------------------------------------------------
Apple                      Fruit             20         $30.00         $600.00
Leek                       Vegetable         40         $50.00         $2000.00

其中总销售额等于数量x价格。请帮忙。提前谢谢!

3 个答案:

答案 0 :(得分:3)

这可以帮助你开始

awk '{printf "%-27s%-18s%-11s$%-14.2f$%.2f\n",$1,$2,$3,$4,$3*$4}' FS=: foo.txt

结果

Apple                      Fruit             20         $30.00         $600.00
Leek                       Vegetable         40         $50.00         $2000.00

答案 1 :(得分:2)

我会在awk中执行计算和货币格式化,使用列表空间,然后sed添加行:

awk -F: -v OFS=: '
    BEGIN {print "Item Description","Category","Qty","Price","Total Sales" }
    { $(NF+1) = $3*$4; $4 = sprintf("$%.2f", $4); $5 = sprintf("$%.2f", $5); print }
' file.txt |
column -s: -t | 
sed '1{p;s/./-/g}'
Item Description  Category   Qty  Price   Total Sales
-----------------------------------------------------
Apple             Fruit      20   $30.00  $600.00
Leek              Vegetable  40   $50.00  $2000.00

答案 2 :(得分:1)

您可以使用awk进行此操作,但使用列计算列大小更简洁(更可靠):

awk 'BEGIN { FS=":" ; print "Item description:Category:Qty:Price:Total sales"}
    {printf("%s:%s:%i:$%.2f:$%.2f\n",$1,$2,$3,$4,$3*$4)}' INPUTFILE | column -t -s:

我要离开打印分隔线(例如,在第一行计算column的长度等后,用awk捕获$0输出。