Chinaunix首页 | 论坛 | 博客
  • 博客访问: 58907
  • 博文数量: 17
  • 博客积分: 25
  • 博客等级: 民兵
  • 技术积分: 220
  • 用 户 组: 普通用户
  • 注册时间: 2010-05-07 11:14
个人简介

。roth lower(substr(ename,2,length(ena)))

文章分类

全部博文(17)

文章存档

2017年(14)

2013年(3)

我的朋友

分类: LINUX

2017-03-26 21:51:19

处理文本时常有头和尾的处理需求,也有逻辑的使用,简单介绍如下

1,awk之 BEGIN 与END

BEGIN 用于需要在文本行轮询前的任务执行,END用于文档沦陷完成后的任务执行

例 找到所有bash用户,开头打印名称列,结尾打印end,并且显示每行的1,3,7列都执行左对齐,每列占10个字符的位置


点击(此处)折叠或打开

  1. linux-SUSE:/home/test # awk -F: 'BEGIN{print "UserName ID Shell"}$7~"bash"{printf "%-10s%-10s-%20s\n",$1,$3,$7}END{print "End of report."}' /etc/passwd
  2. UserName ID Shell
  3. at 25 - /bin/bash
  4. bin 1 - /bin/bash
  5. daemon 2 - /bin/bash
  6. ftp 40 - /bin/bash
  7. games 12 - /bin/bash
  8. lp 4 - /bin/bash
  9. man 13 - /bin/bash
  10. news 9 - /bin/bash
  11. nobody 65534 - /bin/bash
  12. root 0 - /bin/bash
  13. uucp 10 - /bin/bash
  14. openlinux 1000 - /bin/bash
  15. postgres 26 - /bin/bash
  16. End of report.

2,awk 之 if-else 判断

例 判断文件中用户名为 root,打印列admin, 否则打印列 Common User


  1. awk -F: 'BEGIN{print "UserName UserType"}{if ($1=="root") printf "%-15s: %s\n", $1,"Admin";else printf "%-15s: %s\n", $1, "Common User"}' /etc/passwd
  2. UserName UserType
  3. at             : Common User
  4. avahi          : Common User
  5. avahi-autoipd  : Common User
  6. bin            : Common User

3,awk 之while 循环,

awk本身就是对文档的每一行进行遍历,while是遍历每一个字段

点击(此处)折叠或打开

  1. linux-SUSE:/home/test # awk -F: '{i=1;while (i<=NF) {if (length($i)>=4){print $i};i++}}' /etc/passwd
  2. Batch jobs daemon
  3. /var/spool/atjobs
  4. /bin/bash

4,awk 之for ,

awk -F: ‘{for (i=1;i<=NF;i++) {if length($i)>=4 {print $i}}}' /etc/passwd

使用for循环实现上面的列子

点击(此处)折叠或打开

  1. awk -F: '{for (i=1;i<=NF;i++) {if (length($i)>=4) {print $i}}}' /etc/passwd
  2. Batch jobs daemon
  3. /var/spool/atjobs
  4. /bin/bash
  5. avahi
  6. User for Avahi
  7. /run/avahi-daemon
例如 awk 用for 处理统计tcp链接状态,并分开显示

点击(此处)折叠或打开

  1. linux-SUSE:/home/test # netstat -tan #显示当前所有tcp链接及状态
  2. Active Internet connections (servers and established)
  3. Proto Recv-Q Send-Q Local Address Foreign Address State 
  4. tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 
  5. tcp 0 0 127.0.0.1:631 0.0.0.0:* LISTEN 
  6. tcp 0 0 127.0.0.1:25 0.0.0.0:* LISTEN 
  7. tcp 0 0 172.18.107.223:22 172.18.107.217:51520 ESTABLISHED 
  8. tcp 0 0 :::22 :::* LISTEN 
  9. tcp 0 0 ::1:631 :::* LISTEN 
  10. tcp 0 0 ::1:25 :::* LISTEN 
  11. linux-SUSE:/home/test # netstat -tan | wc -l
  12. 9
  13. linux-SUSE:/home/test # netstat -tan | awk '/^tcp/{STATE[$NF]++}END{for (i in STATE) {print i, STATE[i]}}'
  14. LISTEN 6
  15. ESTABLISHED 1
 文本分析统计

awk 统计文本日志中某个ip出现的次数


点击(此处)折叠或打开

  1. linux-SUSE:/home/test # awk '{count[$1]++}END{for (ip in count){printf "%-20s:%d\n",ip,count[ip]}}' ips.log 
  2.                     :1
  3. IOError :1
  4. 192.168.0.:12
  5. 192.168.0.10 :1
  6. 192.168.0.:2
  7. 192.168.0.20 :1
  8. 192.168.0.11 :1


阅读(606) | 评论(0) | 转发(0) |
0

上一篇:py Note,urllib

下一篇:py之装饰器

给主人留下些什么吧!~~