<?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>Fri, 09 Nov 2007 10:24:53 +0000</pubDate> 
<guid>http://jackxiang.com/post//</guid> 
<description>
<![CDATA[ 
	匹配正则：test是文件名<br/>awk '/^(no&#124;yes)/' test&nbsp;&nbsp;<br/><br/><br/>几个实例<br/>$ awk '/^(no&#124;so)/' test-----打印所有以模式no或so开头的行。<br/><br/>$ awk '/^[ns]/&#123;print $1&#125;' test-----如果记录以n或s开头，就打印这个记录。<br/><br/>$ awk '$1 ~/[0-9][0-9]$/(print $1&#125;' test-----如果第一个域以两个数字结束就打印这个记录。<br/><br/>$ awk '$1 == 100 &#124;&#124; $2 < 50' test-----如果第一个或等于100或者第二个域小于50，则打印该行。<br/><br/>$ awk '$1 != 10' test-----如果第一个域不等于10就打印该行。<br/><br/>$ awk '/test/&#123;print $1 + 10&#125;' test-----如果记录包含正则表达式test，则第一个域加10并打印出来。<br/><br/>$ awk '&#123;print ($1 > 5 ? "ok "$1: "error"$1)&#125;' test-----如果第一个域大于5则打印问号后面的表达式值，否则打印冒号后面的表达式值。<br/><br/>$ awk '/^root/,/^mysql/' test----打印以正则表达式root开头的记录到以正则表达式mysql开头的记录范围内的所有记录。如果找到一个新的正则表达式root开头的记录，则继续打印直到下一个以正则表达式mysql开头的记录为止，或到文件末尾。<br/><br/><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、awk ‘/101/’ file 显示文件file中包含101的匹配行。<br/>awk ‘/101/,/105/’ file<br/>awk ‘$1 == 5′ file<br/>awk ‘$1 == “CT”‘ file 注意必须带双引号<br/>awk ‘$1 * $2 >100 ‘ file<br/>awk ‘$2 >5 && $21000000 ‘ 通过管道符获得输入，如：显示第4个域满足条件的行。<br/>4、awk -F “&#124;” ‘&#123;print $1&#125;’ file 按照新的分隔符“&#124;”进行操作。<br/>awk ‘BEGIN &#123; FS=”[: &#92;t&#124;]” &#125;<br/>&#123;print $1,$2,$3&#125;’ file 通过设置输入分隔符（FS=”[: &#92;t&#124;]”）修改输入分隔符。<br/><br/>Sep=”&#124;”<br/>awk -F $Sep ‘&#123;print $1&#125;’ file 按照环境变量Sep的值做为分隔符。<br/>awk -F ‘[ :&#92;t&#124;]’ ‘&#123;print $1&#125;’ file 按照正则表达式的值做为分隔符，这里代表空格、:、TAB、&#124;同时做为分隔符。<br/>awk -F ‘[][]’ ‘&#123;print $1&#125;’ file 按照正则表达式的值做为分隔符，这里代表[、]<br/>5、awk -f awkfile file 通过文件awkfile的内容依次进行控制。<br/>cat awkfile<br/>/101/&#123;print “47 Hello! 47″&#125; –遇到匹配行以后打印 ‘ Hello! ‘.47代表单引号。<br/>&#123;print $1,$2&#125; –因为没有模式控制，打印每一行的前两个域。<br/>6、awk ‘$1 ~ /101/ &#123;print $1&#125;’ file 显示文件中第一个域匹配101的行（记录）。<br/>7、awk ‘BEGIN &#123; OFS=”%”&#125;<br/>&#123;print $1,$2&#125;’ file 通过设置输出分隔符（OFS=”%”）修改输出格式。<br/>8、awk ‘BEGIN &#123; max=100 ;print “max=” max&#125; BEGIN 表示在处理任意行之前进行的操作。<br/>&#123;max=($1 >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>4 ? “high “$1: “low “$1)&#125;’ file<br/>9、awk ‘$1 * $2 >100 &#123;print $1&#125;’ file 显示文件中第一个域匹配101的行（记录）。<br/>10、awk ‘&#123;$1 == ‘Chi’ &#123;$3 = ‘China’; print&#125;’ file 找到匹配行后先将第3个域替换后再显示该行（记录）。<br/>awk ‘&#123;$7 %= 3; print $7&#125;’ file 将第7域被3除，并将余数赋给第7域再打印。<br/>11、awk ‘/tom/ &#123;wage=$2+$3; printf wage&#125;’ file 找到匹配行后为变量wage赋值并打印该变量。<br/>12、awk ‘/tom/ &#123;count++;&#125;<br/>END &#123;print “tom was found “count” times”&#125;’ file END表示在所有输入行处理完后进行处理。<br/>13、awk ‘gsub(/&#92;$/,”");gsub(/,/,”"); cost+=$4;<br/>END &#123;print “The total is $” cost>”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;$/,”");gsub(/,/,”");<br/>if ($4>1000&&$42000&&$43000&&$43000&&$43000) next;<br/>else c4+=$4; &#125;<br/>END &#123;printf “c4=[%d]&#92;n”,c4&#125;”‘ file<br/>通过next在某条件时跳过该行，对下一行执行操作。<br/><br/>14、awk ‘&#123; print FILENAME,$0 &#125;’ file1 file2 file3>fileall 把file1、file2、file3的文件内容全部写到fileall中，格式为<br/>打印文件并前置文件名。<br/>15、awk ‘ $1!=previous &#123; close(previous); previous=$1 &#125;<br/>&#123;print substr($0,index($0,” “) +1)>$1&#125;’ fileall 把合并后的文件重新分拆为3个文件。并与原文件一致。<br/>16、awk ‘BEGIN &#123;”date”&#124;getline d; print d&#125;’ 通过管道把date的执行结果送给getline，并赋给变量d，然后打印。<br/>17、awk ‘BEGIN &#123;system(”echo &#92;”Input your name:&#92;&#92;c&#92;”"); getline d;print “&#92;nYour name is”,d,”&#92;b!&#92;n”&#125;’<br/>通过getline命令交互输入name，并显示出来。<br/>awk ‘BEGIN &#123;FS=”:”; while(getline0) &#123; if($1~”050[0-9]_”) print $1&#125;&#125;’<br/>打印/etc/passwd文件中用户名包含050x_的用户名。<br/><br/>18、awk ‘&#123; i=1;while(i28) flag=1;<br/>if ((j==4&#124;&#124;j==6&#124;&#124;j==9&#124;&#124;j==11)&&i>30) flag=1;<br/>if (flag==0) &#123;printf “%02d%02d “,j,i&#125;<br/>&#125;<br/>&#125;<br/>&#125;’<br/>19、在awk中调用系统变量必须用单引号，如果是双引号，则表示字符串<br/>Flag=abcd<br/>awk ‘&#123;print ‘$Flag’&#125;’ 结果为abcd<br/>awk ‘&#123;print “$Flag”&#125;’ 结果为$Flag<br/><br/>
]]>
</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>