- 论坛徽章:
- 0
|
最近在看awk & sed 中有这么一句
awk '/^#/{a=$2*$3;printf "%s %6.2f\n",$0,a;next}{print}' test
test 文件内容如下
Charlotte Webb
P.0 N61331 97 Y 045 Date:03/14/97
#1 3 7.50
#2 3 7.50
#3 1 7.50
#4 1 7.50
#5 1 7.50
Martin S. Rossi
P.0 NONE Date:03/14/97
#1 2 7.50
#2 5 6.75
这是一个项目,想把每个项目的总金额打印出来,每个#号代表一个项目,打印成如下格式
Charlotte Webb
P.0 N61331 97 Y 045 Date:03/14/97
#1 3 7.50 22.50
#2 3 7.50 22.50
#3 1 7.50 7.50
#4 1 7.50 7.50
#5 1 7.50 7.50
Martin S. Rossi
P.0 NONE Date:03/14/97
#1 2 7.50 15.00
#2 5 6.75 33.75
[root@ test]#
这条awk语句我的理解是,先用^#把文件中所有的项目过出来,然后用第2列X第3列,得出金额,用printf语句打印出来,而next则是读入下一以#开始的行,最后的print语句的功能,我的理解是,这条awk有点像if else,如果是以^#开头的行则交由{a=$2*$3;printf "%s %6.2f\n",$0,a;next}第一个大括号处理;如果不是以^#开始的语句则交由{print}第2个大括号处理,不知道理解对不对,请大家指教!! |
|