awk是文本三剑客之一,其实awk是一种语言,awk被设计用于数据流。它非常有趣,其原因在于它可以对列和行进行操作。例如数组,函数,这是它和C语言有相同地方。
Awk ‘BEGIN{ print“start”} pattern {commands} END {print “end“}
一个awk脚本通常有3部分构成;BEGIN语句块、END语句块和能够使用模式匹配的通用语句块。着3部分是可选的。它们中任何一部分都可以不出现再脚本中。脚本通常会被包含在单引号和双引号中。
1. 执行BEGIN{commands}语句块中的语句。
2. 从文件或stdin中读取一行,然后执行pattern{commands}。重复这个过程,直到文件全部被读取完毕。
3. 当读到输入流末尾时,执行END{commands}语句块。
这就类似while循环,每读一行时,它就会检查该行和提供的样式是否匹配。样式本身可以是正则表达式、条件以及匹配范围等。如果当前匹配该样式,则执行{}中的语句。
echo –e “line1nline2” | awk ‘BEGIN{print “start”}
{print} END {print “END”}’
例如:
echo {1..10} | awk –v FS=” ”’{print $1,$3}’
echo –e “line1 f2 f3nline2 f4 f5nline3 f6 f7”
awk ‘{ “Line no:”NR”,No of fields:”NF,””$0”=$0,
“$1=”$1,”$2=”$2,”$3=”$3}’
那我来个复杂点的语句。
seq 5 | awk ‘BEGIN{sum=0;print “Summation:”}{print $1”+”;sum+=$1} END {print “==”;print sum}’
当然有的人说就这样有啥了不起的啊,来点实用的吧!!!
那好,就来点实用的!!!
在linux有个passwd的文件,里面存着各个用户的账户密码来着
例如:
像这样的排版一定看着头大,不急来看看awk的威力吧!
awk –F: ‘{print $1”t”$6}’ /etc/passwd
awk‘/^r..t/{print $0}’ /etc/passwd 满足r..t这种形式后才打印。像r..t这种形式的也是正则表达式,大伙也可以查查关于正则表达式。
这个就是Linux的命令之美,一条简单的命令可以把你想要的东西给展示出来,美剧里的大黑客基本就是敲命令,你想想要是一个点鼠标的黑客,那该多low啊!!