<?xml version="1.0" encoding="UTF-8" ?>
<rss version="2.0">
<channel>
<title><![CDATA[向东博客 专注WEB应用 构架之美 --- 构架之美，在于尽态极妍 | 应用之美，在于药到病除]]></title> 
<link>http://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>http://jackxiang.com/post//</link>
<title><![CDATA[awk精彩实例]]></title> 
<author>jack &lt;xdy108@126.com&gt;</author>
<category><![CDATA[WEB2.0]]></category>
<pubDate>Wed, 30 Dec 2009 04:05:21 +0000</pubDate> 
<guid>http://jackxiang.com/post//</guid> 
<description>
<![CDATA[ 
	一. 行距：<br/>1. 每行间加一个空行<br/>awk '1; &#123; print "" &#125;' filname.ext&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;#输出当前行，在输出一个空行<br/>awk '1 &#123; print &#125; &#123; print "" &#125;' filname.ext<br/>awk '&#123; print &#125; &#123; print "" &#125;' filname.ext<br/><br/>2. 1的另外一种实现方法：<br/>awk 'BEGIN &#123; ORS="&#92;n&#92;n" &#125;; 1' filname.ext #预先设置每一行的分隔符号为两个换行；你可以尝试把ORS设置为其他的看看效果如何<br/><br/>3. 仅输出非空行，并每行间在加一个空行<br/>awk 'NF &#123; print $0 "&#92;n" &#125;' filname.ext&nbsp;&nbsp;&nbsp;&nbsp;#NF表示当前行的字段数，$0表示当前行，最后再加一个换行<br/>4. 双倍行距；没行间两个空行<br/>awk '1; &#123; print "&#92;n" &#125;' filname.ext　　　　　#默认输出后会换行的，输出&#92;n，则会输出两个空白行<br/>等同于：<br/>awk '&#123; print; print "&#92;n" &#125;' filname.ext<br/><br/><br/>二. 行号和计算<br/>5. 显示当前行在所在文件中的行号<br/>awk '&#123; print FNR "&#92;t" $0 &#125;' filname.ext&nbsp;&nbsp;&nbsp;&nbsp;#FNR，表示当前行在文件中的行号<br/><br/>6. 显示当前行在本次处理过程中的行号<br/>awk '&#123; print NR "&#92;t" $0 &#125;' filname.ext&nbsp;&nbsp;&nbsp;&nbsp;#NR，表示当前行在本次处理过程中的行号<br/><br/>小疑问：为啥有FNR和NR的差别呢？效果不都是一样么？　如果你给如：filname1.ext filname2.ext，你就会看到差别了。原来：FNR，是每个文件中的，换了一个文件，会归零；而NR则每个文件会累加起来的<br/><br/>7. 使用简单样式来输出<br/>awk '&#123; printf("%5d : %s&#92;n", NR, $0) &#125;' filname.ext #行号占用5位，不足补空格<br/><br/>8. 显示非空行<br/>awk 'NF &#123; $0=++a " :" $0 &#125;; &#123; print &#125;' filname.ext #NF前面说了，表示当前行的行号，此处用他作为条件，如果是空行，则NF为0，跳过；否则，用动态变量a存储非空行的数目<br/><br/>9. 计算行数：效果类似wc -l<br/>awk 'END &#123; print NR &#125;' filname.ext #END表示每行都处理完了后，在执行，此时NR就是最后一行的行号，也就是总的行数了。<br/><br/>10. 计算每一行的和<br/>awk '&#123; s = 0; for (i = 1; i <= NF; i++) s = s+$i; print s &#125;' filname.ext<br/>#s用作每行和的累加，从1到NF(每行总的字段数)，依次累加<br/>11.&nbsp;&nbsp; 计算文件中所有字段的和<br/>awk '&#123; for (i = 1; i <= NF; i++) s = s+$i &#125;; END &#123; print s &#125;' filname.ext<br/>#s用作总和的累加，每行都处理完成了，再输出s；注意和10对比，此处没有每行清零，所以累加了。没有设置的变量，默认为空，但是会根据上下文数值计算情况自动变为0<br/><br/>12. 将每个字段用其绝对值代替<br/>awk '&#123; for (i = 1; i <= NF; i++) if ($i < 0) $i = -$i; print &#125;' filname.ext<br/>＃$i表示当前行中的字段，$0表示当前行，可以改变$i的值<br/><br/>13. 计算文件中总的字段和（例如计算单词数）<br/>awk '&#123; total = total + NF &#125;; END &#123; print total &#125;' filname.ext<br/><br/>14. 计算匹配指定信息的总行数<br/>awk '/Linux/ &#123; n++ &#125;; END &#123; print n+0 &#125;' filname.ext<br/><br/>15. 找到文件中每行第一个字段中，最大的数，以及其所在的行<br/>awk '$1 > max &#123; max=$1; maxline=$0 &#125;; END &#123; print max, maxline &#125;' filname.ext<br/>#用max存储最大的数，maxline存储最大数所在的行，并在最后输出<br/><br/>16. 显示当前行的字段数，并输出当前行<br/>awk '&#123; print NF ":" $0 &#125; ' filname.ext<br/><br/>17. 显示每行最后一个字段的内容<br/>awk '&#123; print $NF &#125;' filname.ext #NF表示当前行的字段数，例如为3，则$NF，就是$3，也就是第三个字段了<br/><br/>18. 显示最后一行的最后一个字段<br/>awk '&#123; field = $NF &#125;; END &#123; print field &#125;' filname.ext<br/>#每行处理没有输出，尽在最后输出，field作为每行的最后一行的暂存变量<br/><br/>19. 显示字段数小于4的行<br/>awk 'NF < 4' filname.ext #&#123;&#125;以外的内容，作为条件，没有&#123;&#125;，则默认输出当前行<br/><br/>20. 显示每行的最后一个字段小于4的行<br/>awk '$NF < 4' filname.ext #注意和19对比
]]>
</description>
</item><item>
<link>http://jackxiang.com/post//#blogcomment</link>
<title><![CDATA[[评论] awk精彩实例]]></title> 
<author> &lt;user@domain.com&gt;</author>
<category><![CDATA[评论]]></category>
<pubDate>Thu, 01 Jan 1970 00:00:00 +0000</pubDate> 
<guid>http://jackxiang.com/post//#blogcomment</guid> 
<description>
<![CDATA[ 
	
]]>
</description>
</item>
</channel>
</rss>