Chinaunix首页 | 论坛 | 博客
  • 博客访问: 54990
  • 博文数量: 7
  • 博客积分: 143
  • 博客等级: 民兵
  • 技术积分: 90
  • 用 户 组: 普通用户
  • 注册时间: 2011-05-15 20:24
文章分类

全部博文(7)

文章存档

2014年(3)

2012年(4)

我的朋友

分类: LINUX

2012-04-28 13:55:23

注:整理过一些awk基础资料。有朋友说没例子没实际意义。就把自己学习和练习的例子拿出来。但愿对喜欢awk的朋友有所帮助吧。

但首先告诉那些只看别人例子而不动手自己运用练习的朋友一个建议:看10个例子不如自己先去练习1个,只看会了约等于什么都不会。只有自己能熟练写出才是真会了。(因为我曾经也常常犯那样的错误,看过,理解了,然后就自以为会了。。。可是,到实际用的时候,事实告诉我我完全不会。)下面的例子有些步骤也许是多余的,但为了多几个例子,就迂回的做了操作。

首先我的res.c是从服务上读取到的一个物品流行log的一部分,在此基础上做的运用和联系。

# tail -1 res.c
p2g14F8D67D20002 , p2g1 , 国王:p2g2_0033763875-2 , 53 , 99

规范格式,删除多余的空格:
# awk -F ' ,' 'BEGIN{OFS=","}{print $1,$2, $3, $4, $5}' res.c
或者
awk '/ ,/{gsub(/ ,/, ",")}1' res.c

替换“:”为“,”统一全部格式便于以后更多的操作:
# awk '/:/{gsub(/:/, ", ")}1' res.c
: p2g14F8D67D20002, p2g1, 国王, p2g2_0033763875-2, 53, 99
删除第4列
# awk '{$4=""}1' res.c


得出最终需要的res.c文件:
# awk -F ',' '{printf("%s, %d\n", $3, $4)}' res.c
旋缘, 63
旋缘, 63
含笑容, 91
含笑容, 91
剑亦, 100
古意, 37
浪子漂流, 92
浪子漂流, 92
浪子漂流, 92
浪子漂流, 92
浪子漂流, 92
浪子漂流, 92
浪子漂流, 92
浪子漂流, 92
浪子漂流, 92
浪子漂流, 92
青涩葬礼, 100
青涩葬礼, 100
青涩葬礼, 100
国王, 53

打印出倒数第2行到倒数第5行(这个应该算一个比较基础和全面的永远吧。其他的好多要求都可以通过这个语句的变形得到呢)
# awk -F ',' 'BEGIN{i=1}{a[i]=$0;i++}END{{i-=1;for(j = i-2;j>= 1 &&j>= i-5 ;j--)print j ":" a[j]}}' res.c

统计第一列的数值一共有过少个(统计玩家达标消费的次数):
# awk '{a[$1]++}END{for(i in a)print i a[i]}' res.c > res002.c
旋缘, 2
青涩葬礼, 3
浪子漂流, 10
古意, 1
国王, 1
剑亦, 1
含笑容, 2
把第2列的数值做相加(统计一下一共的次数做核对)
# awk -F',' '{i+=$2}END{print i}' res002.c
而计算一共的行数(类似:"wc -l"):
# awk 'END{print NR}' res.c

删除重复连续的行 ("uniq")
# awk 'a !~ $0; {a=$0}'

删除重复的、非连续的行
# awk '! a[$0]++' 或者:
# awk '!($0 in a) {a[$0];print}'

基础的运用应该也就这些面了吧。欢迎喜欢awk的朋友可以继续一起学习

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