既然你在这里的目标似乎很明确,那么用awk
来替代使用bash
的数组如何?通常情况下,使用正确的工具来完成工作会使事情变得更容易!
下面的awk
脚本应该可以得到类似你想要的东西。
# This will print your headers, formatted the way you had above, but without
# the need for explicit spaces.
BEGIN {
printf "%-22s %-16s %-14s %-15s %-13s %s\n", "Title", "Author", "Price",
"Qty Avail.", "Qty Sold", "Total Sales"
# This is described below, and runs for every record (line) of input
printf "%-22s %-16s %-14.2f %-15d %-13d %0.2f\n",
substr($1, 1, 22), substr($2, 1, 16), $3, $4, $5, ($3 * $5)
第二部分的代码(在大括号之间)为每一行输入运行。printf
是用于格式化输出的,使用给定的格式字符串来打印每个字段,用$1
、$2
等表示。在awk
中,这些变量被用来访问你的记录(本例中为行)的字段。替换代码8】是用来截断输出的,如下图所示,但如果你不介意字段不排成一行,可以很容易地删除。我认为 "销售总额 "应该是价格乘以销售数量,但你也可以很容易地更新它。
然后,你把这个文件保存在books.awk
中,像这样调用这个脚本。
$ awk -F: -f books.awk books
Title Author Price Qty Avail. Qty Sold Total Sales
Harry Potter - The Hal J.K Rowling 40.30 10 50 2015.00
The little Red Riding Dan Lin 40.80 20 10 408.00
Harry Potter - The Pho J.K Rowling 50.00 30 20 1000.00
Harry Potter - The Dea Dan Lin 55.00 33 790 43450.00
Little Prince The Prince 15.00 188 9 135.00
Lord of The Ring Johnny Dept 56.80 100 38 2158.40