<?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 10:41:34 +0000</pubDate> 
<guid>http://jackxiang.com/post//</guid> 
<description>
<![CDATA[ 
	<br/><div class="code">提示：其实 man awk 提供的文档也很详细，不过整理加上中文估计还是可以对初学者有一定帮助的。<br/><br/>awk 用法：awk ‘ pattern &#123;action&#125; ‘<br/><br/>变量名 含义<br/>ARGC 命令行变元个数<br/>ARGV 命令行变元数组<br/>FILENAME 当前输入文件名<br/>FNR 当前文件中的记录号<br/>FS 输入域分隔符，默认为一个空格<br/>RS 输入记录分隔符<br/>NF 当前记录里域个数<br/>NR 到目前为止记录数<br/>OFS 输出域分隔符<br/>ORS 输出记录分隔符<br/><br/>1、<br/>awk ‘/101/’ file 显示文件file中包含101的匹配行。<br/>awk ‘/101/,/105/’ file<br/>awk ‘$1 == 5′ file<br/>awk ‘$1 == “CT”‘ file 注意必须带双引号<br/>awk ‘$1 * $2 &gt;100 ‘ file<br/>awk ‘$2 &gt;5 &amp;&amp; $2&lt;=15&#039; file<br/><br/>2、<br/>awk &#039;&#123;print NR,NF,$1,$NF,&#125;&#039; file 显示文件file的当前记录号、域数和每一行的第一个和最后一个域。<br/>awk &#039;/101/ &#123;print $1,$2 + 10&#125;&#039; file 显示文件file的匹配行的第一、二个域加10。<br/>awk &#039;/101/ &#123;print $1$2&#125;&#039; file<br/>awk &#039;/101/ &#123;print $1 $2&#125;&#039; file 显示文件file的匹配行的第一、二个域，但显示时域中间没有分隔符。<br/><br/>3、<br/>df &#124; awk &#039;$4&gt;1000000 ‘ 通过管道符获得输入，如：显示第4个域满足条件的行。<br/><br/>4、<br/>awk -F “&#124;” ‘&#123;print $1&#125;’ file 按照新的分隔符“&#124;”进行操作。<br/>awk ‘BEGIN &#123; FS=”&#91;: &#92;t&#124;&#93;” &#125; &#123;print $1,$2,$3&#125;’ file 通过设置输入分隔符（FS=”&#91;: &#92;t&#124;&#93;”）修改输入分隔符。<br/><br/>Sep=”&#124;”<br/>awk -F $Sep ‘&#123;print $1&#125;’ file 按照环境变量Sep的值做为分隔符。<br/>awk -F ‘&#91; :&#92;t&#124;&#93;’ ‘&#123;print $1&#125;’ file 按照正则表达式的值做为分隔符，这里代表空格、:、TAB、&#124;同时做为分隔符。<br/>awk -F ‘&#91;&#93;&#91;&#93;’ ‘&#123;print $1&#125;’ file 按照正则表达式的值做为分隔符，这里代表&#91;、&#93;<br/><br/>5、<br/>awk -f awkfile file 通过文件awkfile的内容依次进行控制。<br/>cat awkfile /101/&#123;print “&#92;047 Hello! &#92;047″&#125; –遇到匹配行以后打印 ‘ Hello! ‘.&#92;047代表单引号。<br/>&#123;print $1,$2&#125; –因为没有模式控制，打印每一行的前两个域。<br/><br/>6、<br/>awk ‘$1 ~ /101/ &#123;print $1&#125;’ file 显示文件中第一个域匹配101的行（记录）。<br/><br/>7、<br/>awk ‘BEGIN &#123; OFS=”%”&#125; &#123;print $1,$2&#125;’ file 通过设置输出分隔符（OFS=”%”）修改输出格式。<br/><br/>8、<br/>awk ‘BEGIN &#123; max=100 ;print “max=” max&#125; BEGIN 表示在处理任意行之前进行的操作。&#123;max=($1 &gt;max ?$1:max); print $1,”Now max is “max&#125;’ file 取得文件第一个域的最大值。<br/>（表达式1?表达式2:表达式3 相当于：<br/>if (表达式1)<br/>表达式2<br/>else<br/>表达式3<br/>awk ‘&#123;print ($1&gt;4 ? “high “$1: “low “$1)&#125;’ file<br/><br/>9、<br/>awk ‘$1 * $2 &gt;100 &#123;print $1&#125;’ file 显示文件中第一个域匹配101的行（记录）。<br/><br/>10、<br/>awk ‘&#123;$1 == ‘Chi’ &#123;$3 = ‘China’; print&#125;’ file 找到匹配行后先将第3个域替换后再显示该行（记录）。<br/>awk ‘&#123;$7 %= 3; print $7&#125;’ file 将第7域被3除，并将余数赋给第7域再打印。<br/><br/>11、<br/>awk ‘/tom/ &#123;wage=$2+$3; printf wage&#125;’ file 找到匹配行后为变量wage赋值并打印该变量。<br/><br/>12、<br/>awk ‘/tom/ &#123;count++;&#125;<br/>END &#123;print “tom was found “count” times”&#125;’ file END表示在所有输入行处理完后进行处理。<br/><br/>13、<br/>awk ‘gsub(/&#92;$/,”&quot;);gsub(/,/,”&quot;); cost+=$4; END &#123;print “The total is $” cost&gt;”filename”&#125;’ file gsub函数用空串替换$和,再将结果输出到filename中。<br/>1 2 3 $1,200.00<br/>1 2 3 $2,300.00<br/>1 2 3 $4,000.00<br/><br/>awk ‘&#123;gsub(/&#92;$/,”&quot;);gsub(/,/,”&quot;);<br/>if ($4&gt;1000&amp;&amp;$4&lt;2000) c1+=$4;<br/>else if ($4&gt;2000&amp;&amp;$4&lt;3000) c2+=$4;<br/>else if ($4&gt;3000&amp;&amp;$4&lt;4000) c3+=$4;<br/>else c4+=$4; &#125;<br/>END &#123;printf &quot;c1=&#91;%d&#93;;c2=&#91;%d&#93;;c3=&#91;%d&#93;;c4=&#91;%d&#93;&#92;n&quot;,c1,c2,c3,c4&#125;&quot;&#039; file<br/>通过if和else if完成条件语句<br/><br/>awk &#039;&#123;gsub(/&#92;$/,&quot;&quot;);gsub(/,/,&quot;&quot;);<br/>if ($4&gt;3000&amp;&amp;$4&lt;4000) exit;<br/>else c4+=$4; &#125;<br/>END &#123;printf &quot;c1=&#91;%d&#93;;c2=&#91;%d&#93;;c3=&#91;%d&#93;;c4=&#91;%d&#93;&#92;n&quot;,c1,c2,c3,c4&#125;&quot;&#039; file<br/>通过exit在某条件时退出，但是仍执行END操作。<br/>awk &#039;&#123;gsub(/&#92;$/,&quot;&quot;);gsub(/,/,&quot;&quot;);<br/>if ($4&gt;3000) next;<br/>else c4+=$4; &#125;<br/>END &#123;printf “c4=&#91;%d&#93;&#92;n”,c4&#125;”‘ file<br/>通过next在某条件时跳过该行，对下一行执行操作。<br/><br/>14、<br/>awk ‘&#123; print FILENAME,$0 &#125;’ file1 file2 file3&gt;fileall 把file1、file2、file3的文件内容全部写到fileall中，格式为<br/>打印文件并前置文件名。<br/><br/>15、<br/>awk ‘ $1!=previous &#123; close(previous); previous=$1 &#125;<br/>&#123;print substr($0,index($0,” “) +1)&gt;$1&#125;’ fileall 把合并后的文件重新分拆为3个文件。并与原文件一致。<br/><br/>16、<br/>awk ‘BEGIN &#123;”date”&#124;getline d; print d&#125;’ 通过管道把date的执行结果送给getline，并赋给变量d，然后打印。<br/><br/>17、<br/>awk ‘BEGIN &#123;system(”echo &#92;”Input your name:&#92;&#92;c&#92;”&quot;); getline d;print “&#92;nYour name is”,d,”&#92;b!&#92;n”&#125;’<br/>通过getline命令交互输入name，并显示出来。<br/>awk ‘BEGIN &#123;FS=”:”; while(getline&lt; &quot;/etc/passwd&quot; &gt;0) &#123; if($1~”050&#91;0-9&#93;_”) print $1&#125;&#125;’<br/>打印/etc/passwd文件中用户名包含050x_的用户名。<br/><br/>18、<br/>awk ‘&#123; i=1;while(i awk &#039;&#123; for(i=1;i type file&#124;awk -F &quot;/&quot; &#039;<br/>&#123; for(i=1;i &#123; if(i==NF-1) &#123; printf &quot;%s&quot;,$i &#125;<br/>else &#123; printf &quot;%s/&quot;,$i &#125; &#125;&#125;&#039; 显示一个文件的全路径。<br/>用for和if显示日期<br/>awk &#039;BEGIN &#123;<br/>for(j=1;j&lt;=12;j++)<br/>&#123;<br/>flag=0;<br/>printf &quot;&#92;n%d月份&#92;n&quot;,j;<br/>for(i=1;i&lt;=31;i++)<br/>&#123;<br/>if (j==2&amp;&amp;i&gt;28) flag=1;<br/>if ((j==4&#124;&#124;j==6&#124;&#124;j==9&#124;&#124;j==11)&amp;&amp;i&gt;30) flag=1;<br/>if (flag==0) &#123;printf “%02d%02d “,j,i&#125;<br/>&#125;<br/>&#125;<br/>&#125;’<br/><br/>19、<br/>在awk中调用系统变量必须用单引号，如果是双引号，则表示字符串<br/>Flag=abcd<br/>awk ‘&#123;print ‘$Flag’&#125;’ 结果为abcd<br/>awk ‘&#123;print “$Flag”&#125;’ 结果为$Flag</div>
]]>
</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>