<?xml version="1.0" encoding="UTF-8" ?>
<rss version="2.0">
<channel>
<title><![CDATA[向东博客 专注WEB应用 构架之美 --- 构架之美，在于尽态极妍 | 应用之美，在于药到病除]]></title> 
<link>https://jackxiang.com/index.php</link> 
<description><![CDATA[赢在IT，Playin' with IT,Focus on Killer Application,Marketing Meets Technology.]]></description> 
<language>zh-cn</language> 
<copyright><![CDATA[向东博客 专注WEB应用 构架之美 --- 构架之美，在于尽态极妍 | 应用之美，在于药到病除]]></copyright>
<item>
<link>https://jackxiang.com/post//</link>
<title><![CDATA[shell中的精髓是awk？awk对文本的处理确实很厉害]]></title> 
<author>jack &lt;xdy108@126.com&gt;</author>
<category><![CDATA[WEB2.0]]></category>
<pubDate>Mon, 07 Dec 2009 06:53:25 +0000</pubDate> 
<guid>https://jackxiang.com/post//</guid> 
<description>
<![CDATA[ 
	我对shell中的精髓是awk不敢苟同，不过awk对字符串的处理很是蛮强大的。<br/><br/>平时做unix/linux管理的朋友对cat、grep等肯定不会陌生，但我要说，awk才是shell中的精髓所在。<br/><br/>我们可以把awk看作一个小的c语言的实现，awk的灵活多变黎补了shell的不足。<br/><br/>学习awk可以从“man awk”开始，但更高级的用法，可以参考网上的更详尽的文档。nawk是awk的兄弟，算是awk的一个高级实现，能实现更多的更高级（好用）的应用。<br/><br/>不会用awk，别说你已经懂了shell编程。<br/><br/>这里附录一下awk的常识：<br/><br/>1、awk程序体的一般格式为：<br/>awk '<br/>BEGIN&#123;&#125;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; #程序开始前的预处理部分可以对一些变量进行初始化<br/>&#123;&#125;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;#对每条记录进行操作的主体部分<br/>END&#123;&#125;' <文件名> #程序的结束部分，可以对处理的结果作一些善后或总结<br/><br/>2、awk的程序风格完全可以按照c语言的风格书写。例如：<br/>awk '&#123;<br/>if ($1 == "FIND")<br/>regex = $2;<br/>else <br/>&#123;<br/>where = match($0, regex);<br/>if (where)<br/>printf("Match of %s found at %d in %s",regex,where,$0);<br/>&#125;<br/>&#125;' <文件名><br/>当然，awk支持一些更简洁的书写风格，例如上面的printf语句可以写成：<br/>print "Match of", regex, "found at", where, "in", $0<br/><br/>3、记录和字段的表示法。<br/>整条记录表示为$0，第n个字段表示为$n<br/><br/>4、常用内在变量。<br/>NR 是记录号，即当前正在处理第几条记录。<br/>NF 是当前记录共有多少个字段，<br/>这样，每条记录最后一个字段可表示为$NF,倒数第2个字段可表示为$(NF-1)<br/>FS 是一个说明各个字段如何分隔开的预定义变量.<br/>这经常用于BEGIN语句体中预定义,类似于cut中的-d功能.<br/>RS 是一个说明各个记录如何分隔开的预定义变量.<br/>这经常用于BEGIN语句体中预定义,例如,RS=":" 表示各条记录是用":"分开的.<br/>OFS 定义各字段在输出时如何分隔开.<br/>ORS 定义各条记录在输出时如何分隔开.<br/><br/>5、输出重定向。<br/>例如：<br/>awk '&#123; print $2 > "phone-list"<br/>print $1 > "name-list" &#125;' BBS-list <br/>双引号内为文件名。<br/><br/>6、在awk中利用管道向shell命令传递参数。<br/>例如：<br/>awk '&#123; print $1 > "names.unsorted"<br/>print $1 &#124; "sort -r > names.sorted" &#125;' BBS-list<br/><br/>7、awk的特有函数和其它功能请参阅awk手册。<br/><br/>另外，nawk比awk具有更多的功能，它能够把shell中的变量传递给nawk。<br/>nawk格式：<br/>Usage: nawk [-f programfile &#124; 'program'] [-Ffieldstep] [-v var=value] [files]<br/>例如，可以这样向nawk传递shell变量：<br/>nawk -v dr=$HOME -v pk=`hostname` 'BEGIN&#123;print dr pk&#125;'<br/>
]]>
</description>
</item><item>
<link>https://jackxiang.com/post//#blogcomment</link>
<title><![CDATA[[评论] shell中的精髓是awk？awk对文本的处理确实很厉害]]></title> 
<author> &lt;user@domain.com&gt;</author>
<category><![CDATA[评论]]></category>
<pubDate>Thu, 01 Jan 1970 00:00:00 +0000</pubDate> 
<guid>https://jackxiang.com/post//#blogcomment</guid> 
<description>
<![CDATA[ 
	
]]>
</description>
</item>
</channel>
</rss>