码迷,mamicode.com
首页 > 其他好文 > 详细

awk固定字段

时间:2015-05-14 22:07:32      阅读:130      评论:0      收藏:0      [点我收藏+]

标签:awk   awk命令   awk固定字段   

下面这个例子中,字段都是固定宽度的,但没有使用字段分隔符substr函数可以用来创建字段。
范例

cat fixed
031291ax5633(408)987-0124
021589bg2435(415)866-1345
122490de1237(916)933-1234
010187ax3458(408)264-2546
092491bd9923(415)134-8900
112990bg4567(803)234-1456
070489qr3455(415)899-1426

$ awk ‘{printf substr($0,1,6)" ";printf substr($0,7,6)" ";\
print substr($0,13,length)}‘
 fixed
031291 ax5633 (408)987-0124
021589 bg2435 (415)866-1345
122490 de1237 (916)933-1234
010187 ax3458 (408)264-2546
092491 bd9923 (415)134-8900
112990 bg4567 (803)234-1456
070489 qr3455 (415)899-1426

说明
第1个字段通过从整个记录中提取子串得到,子串从记录第一个字符开始、长度为6个字符。接下来,打印一个空格。第2个字段是通过在记录中提取从位置7开始、长度为6个字符的子串得到,后跟一个空格。最后一个字段则是通过在整个记录中提取从位置13开始、到由行的长度所确定的位置之间的子串获得(如果未指定参数,length函数返回当前行($0)的长度)。


空字段 如果用固定长度的字段来存储数据,就可能出现一些空字段。下面这个例子中,substr函数被用来保存字段,而不考虑它们是否包含数据。
范例

cat db
xxx  xxx
xxx  abc  xxx
xxx  a    bbb
xxx       xx

cat awkfix
# Preserving empty fields. Field width is fixed.
{
    f[1]=substr($O, 1, 3)
    f[2]=substr($O, 5, 3)
    f[3]=substr($O, 9, 3)
    line=sprintf ("%-4s%-4s%-4s\n",f[1],f[2],f[3])
    print line
}

$ awk -f awkfix db
xxx  xxx
xxx  abc  xxx
xxx  a    bbb
xxx       xx

说明:
1. 打印文件db的内容。这个文件中有一些空字段。
2. 数组f的第1个元素被赋值为由位置1开始、长度为3的记录的子串。
3. 数组f的第2个元素被赋值为由位置5开始、长度为3的记录的子串。
4. 数组f的第3个元素被赋值为由位置9开始、长度为3的记录的子串。
5. 用sprintf函数设置好数组元素的格式,然后将它们赋值给用户自定义的变量line。
6. 打印line的值,可以看到结果中空字段依然被保留。


带$、逗号或其他字符的数字 下面这个例子中,价格字段中包含一个美元符号和逗号。脚本必须删掉这些字符,才能把价格加起来得出总的开销。可以通过gsub函数来完成这一任务。
范例

cat vendor
access tech:gp237221:220:vax789:20/20:11/01/90:$1,043.00
alisa systems:bp262292:280:macintosh:new updates:06/30/91:$456.00
alisa systems:gp262345:260:vax8700:alisa talk:02/03/91:$1,598.50
apple computer:zx342567:240:rnacs:e-mail:06/25190:$575.75
caci:gp262313:280:sparc station:networkll.5:05/12/91:$1,250.75
datalogics:bp13.2455:260:microvax2:pagestation maint:07/01/90:$1,200.00
dec:zx354612:220:microvax2:vms srns:07/20/90:$1,350.00

$ awk -F‘{gsub(/\$/,"");gsub(/,/,"");cost +=$7};\
END{print "The tota1 is $" cost}‘
 vendor
$7474

说明:第一个gsub函数用空字符串对美元符号(\$)进行全局替换;第二个gsub函数则用空串替换全部逗号。然后,将用户自定义变量cost与每行的第7个字段相加,再把每次的结果赋回给cost,由此统计出总数。END块打印出字符串"The total is $",后面跟着cost的值。

参考资料:http://www.linuxawk.com/jiaocheng/325.html

awk固定字段

标签:awk   awk命令   awk固定字段   

原文地址:http://blog.csdn.net/xiyangyang052/article/details/45725761

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!