Your SlideShare is downloading. ×
0
Awk skills
Awk skills
Awk skills
Awk skills
Awk skills
Awk skills
Awk skills
Awk skills
Awk skills
Awk skills
Awk skills
Awk skills
Awk skills
Upcoming SlideShare
Loading in...5
×

Thanks for flagging this SlideShare!

Oops! An error has occurred.

×
Saving this for later? Get the SlideShare app to save on your phone or tablet. Read anywhere, anytime – even offline.
Text the download link to your phone
Standard text messaging rates apply

Awk skills

13,791

Published on

by bones7456 @ HZLUG

by bones7456 @ HZLUG

Published in: Technology
1 Comment
10 Likes
Statistics
Notes
  • I agree with the upstair guy.
       Reply 
    Are you sure you want to  Yes  No
    Your message goes here
No Downloads
Views
Total Views
13,791
On Slideshare
0
From Embeds
0
Number of Embeds
7
Actions
Shares
0
Downloads
65
Comments
1
Likes
10
Embeds 0
No embeds

Report content
Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
No notes for slide

Transcript

  • 1. Awk skills By @ bones7456 2011.1
  • 2. 简介 awk是*nix系统的最基本的命令之一 我的路由器里都有包含 awk是一种 程序语言 因为有变量、函数、循环、分支等等 不需编译,无类型,支持数组 代码风格和C类似 方便的内建功能和内建变量 $0, $1, ..., NF, NR, ... 有 mawk 、 gawk 等不同实现版本,但大同小异 gawk 有一些额外的函数
  • 3. Hello world? awk 最初的用法,估计是取文本流里的某些列 echo -e "a 1 2nb 3 4na 5 6" | awk '{print $2,$3}' 接下来,是取特定行的某些列 awk '$1 == "a"{print $2,$3}'
  • 4. awk的执行过程 Pattern { Actions } 结构 整个awk程序,就是由若干个 Pattern { Actions } 组成 结论:依次读入文本流的一行,更新内建变量的值,对这行依次执行每个Pattern { Actions }
  • 5. Pattern可以是... 空 (始终满足) 任何条件表达式 >, <, >=, <=, ==, !=, ~, !~ 上面的组合 特殊值 BEGIN END
  • 6. Actions可以是... I/O 指令 print, printf, getline 计算表达式 赋值、调用函数 循环、分支 while、if、...
  • 7. I/O之I 从外部读入数据,是awk的默认行为 读入数据的时候,用内建变量 FS 来把整行分割成列。 FS 可以通过命令行参数-F指定,也可以直接赋值。 整行数据放在 $0 ,第一列放在 $1 ,第二列 $2 ... 总列数放在 NF ,读入的行数放在 NR 、 FNR 可以使用 $NF 、 $(NF-1)
  • 8. I/O之I 唯一的输入函数getline 读文件 awk 'BEGIN{while(getline < "/etc/issue")print $0}' 读管道 awk 'BEGIN{"date" | getline a; print a}' 注意:命令最好要主动close掉,不然会引起不可知的问题 awk 'BEGIN{cmd="date";cmd | getline a;close(cmd); print a}' close的内容要命令严格一致,所以建议使用变量。
  • 9. I/O之O print 依次输出指定的各项 各项之间用 OFS 分隔,默认是一个空格 最后面加上一个 ORS ,默认是一个回车 printf 类似C语言的printf 用格式字符串指定输出方式,不添加任何额外的字符 C的printf可以看 man 3 printf
  • 10. 数组 一个有实际功能的程序:word counter awk -F"[ t,.]+" '{for(i=1;i<=NF;i++)A[$i]++} END{for(key in A)print key,A[key]}' | sort -nrk2 | head | column -t awk中的数组是离散的,下标可以是任意类型,多维数组也一维处理。 awk 'BEGIN{A[1,2]=3;A[1,2]++;print A[1,2]}'
  • 11. 从shell传入变量 传变量的功能很常用,要用-v参数 awk -v abc=1 'BEGIN{abc++;print abc}'
  • 12. 杂项 处理多行数据? awk是用变量 RS 来分“行”的,默认是n 改变 RS ,就可以改变分行方式 RS ="",为空则用空白行分块 awk代码很巨大?本身包含单引号? 可以把代码写进文件,用 -f 引用 有哪些内建函数?忘了内建变量的具体含义? 可以man awk,或者打开 http://luy.li/data/awk.html
  • 13. Thanks! any questions?

×