Chinaunix首页 | 论坛 | 博客
  • 博客访问: 46966
  • 博文数量: 14
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 150
  • 用 户 组: 普通用户
  • 注册时间: 2015-11-16 18:43
文章分类

全部博文(14)

文章存档

2016年(6)

2015年(8)

我的朋友

分类: LINUX

2015-11-24 23:34:30

awk系统变量FS&RS妙用

1awk脚本:

awk '

BEGIN{ FS="\n" ; RS="" }  

#将字段分隔符改为\n取消记录换行符,相当于把每一行转换为一个字段,拼在同一记录中,然后针对每一字段处理,避免了统一处理时出现特殊行格式不同处理结果不同。

NF >= 3 {                             

        for(i=3;i<=NF;++i){                    #调用第三字段开始,即原本的第三行开始,避免处理了第一第二字段(原本的第一第二行)          

                sv=split($i, order, " ")         #split函数将第三字段分拆赋值给数组,相当于原本第三行分拆

        if(sv==3){

                title=order[1]

                copies=order[2]

                price=order[3]

                amount=copies*price

                total_vol+=copies

                total_amt+=amount

                vol[title]+=copies

                amt[title]+=amount

        }

        else

                print "incomplete record"

        }

}

END{

        printf ("%5s\t%10s\t%6s\n\n", "TITLE", "COPIES SOLD", "TOTAL")

        for(title in vol)

                printf ("%5s\t%10d\t$%7.2f\n", title, vol[title], amt[title])

        printf ("%s\n", "--------------")

        printf ("\t%s%4d\t$%7.2f\n", "Total ", total_vol, total_amt)

}' $*

 

2)目标文本

[root@redhat unit10]# cat testfile1_dingdan

charlotte webb                                    #第一第二行接下来的格式不同

P.O N64331 97 Y 045 Date: 03/14/97

#1 3 7.50

#2 3 7.50

#3 1 7.50

#4 1 7.50

 

3)输出结果:

[root@redhat unit10]# ./awkscript3_mount_max testfile1_dingdan

TITLE   COPIES SOLD      TOTAL

 

   #1            3      $  22.50

   #2            3      $  22.50

   #3            1      $   7.50

   #4            1      $   7.50

--------------

        Total    8      $  60.00

阅读(1047) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~