<?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, 01 Dec 2010 02:44:55 +0000</pubDate> 
<guid>http://jackxiang.com/post//</guid> 
<description>
<![CDATA[ 
	这里收集了平时awk的一些问题:<br/><br/>awk教程<br/><br/>awk的基本功能是对文件进行指定规则浏览和抽取信息。<br/>基本格式：<br/>(1) awk [-F 分隔域] &#039;command&#039; input-file(s)<br/>(2) 写入shell脚本中<br/>(3) awk -f awk-script-file input-file(s)<br/><br/>注意：这里如果使用if等编程语句，要用&#123;&#125;括起来。<br/><br/><br/>test<br/><br/>name&nbsp;&nbsp;&nbsp;&nbsp;grade&nbsp;&nbsp;&nbsp;&nbsp;score&nbsp;&nbsp;&nbsp;&nbsp;id<br/>hover&nbsp;&nbsp;&nbsp;&nbsp;2&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;96&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;2003073<br/>twq&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;3&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;91&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;2003074<br/>zsm&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;4&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;92&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;2003075<br/>hzm&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;5&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;95&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;2003076<br/>bl&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;6&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;96&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;2003077<br/><br/><br/>1,文本过滤处理：<br/>(1) awk &#039;&#123;print $0&#125;&#039; test&nbsp;&nbsp; #打印文件的全部内容<br/>注意：这里awk使用函数print用来打印整个文件的内容。其中的$0就表示整个文件的内容。<br/><br/>(2) awk &#039;&#123;print $1&#125;&#039; test&nbsp;&nbsp; #抽取文件test中的第一列<br/>注意：如果awk没有使用-F指定分隔符号，默认的分隔符号是空格和TAB键。<br/><br/>#列出所有的用户名和登陆的shell名<br/>awk -F : &#039;&#123;print $1,$6&#125;&#039; /etc/passwd<br/><br/>(3) awk -F : &#039;$1==&quot;root&quot; &#123;print $0&#125;&#039; /etc/passwd<br/>指打印用户名为root的那一行<br/><br/>2,文本格式定制<br/>(1)给输出信息加上表头<br/>awk -F : &#039;BEGIN &#123;print &quot;name&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;shell&#92;n--------------------------------&quot;&#125;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&#123;print $!&quot;&#92;t&quot;$6&#125;&#039; /etc/passwd<br/><br/>(2)<br/>awk -F : &#039;BEGIN &#123;print &quot;name&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;shell&#92;n--------------------------------&quot;&#125;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&#123;print $!&quot;&#92;t&quot;$6&#125; END &#123;&quot;end-of-report&quot;&#125;&#039; /etc/passwd<br/><br/>3,在awk中使用正则表达式<br/>^&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;表示匹配行首的字符<br/>[...]&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;匹配[]正的任意一个字符<br/>(str1&#124;str2)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;匹配含有str1或str2的行&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br/>.&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;匹配任意一个字符<br/><br/><br/>(1)匹配<br/>为使一域匹配一正则表达式，可以使用以下两种方法：<br/>&nbsp;&nbsp;&nbsp;&nbsp;1)$n~正则表达式<br/>&nbsp;&nbsp;&nbsp;&nbsp;2)if($n~正则表示式) print $0<br/><br/>awk -F: &#039;$0 ~ /^root/&#039; /etc/passwd&nbsp;&nbsp;#打印以root开头的行<br/>awk -F: &#039;&#123;if($0 ~ /^root/) print $0&#125;&#039; /etc/passwd&nbsp;&nbsp;#和上一句等效<br/><br/>*精确匹配*<br/>#打印名字为root的用户在/etc/passwd文件中的记录<br/>awk -F : &#039;$1==&quot;root&quot; &#123;print $0&#125;&#039; /etc/passwd<br/>#打印路径为/root的用户在/etc/passwd中的记录<br/>awk -F : &#039;$6==&quot;&#92;/root&quot; &#123;print $0&#125;&#039; /etc/passwd<br/><br/>4,在awk中使用条件操作符<br/>&lt;&nbsp;&nbsp;&nbsp;&nbsp;小于&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&gt;=&nbsp;&nbsp;&nbsp;&nbsp;大于等于<br/>&lt;=&nbsp;&nbsp;&nbsp;&nbsp;小于等于&nbsp;&nbsp;&nbsp;&nbsp;~&nbsp;&nbsp;&nbsp;&nbsp;匹配正则表达式<br/>==&nbsp;&nbsp;&nbsp;&nbsp;等于&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;!~&nbsp;&nbsp;&nbsp;&nbsp;不匹配正则表达式<br/>!=&nbsp;&nbsp;&nbsp;&nbsp;不等于<br/><br/>(1)模糊匹配<br/>i)使用if&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &#123;if($1~/zhengxh/) print $0&#125;<br/>ii)不用if&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&#039;$0 ~ /zhengxh/&#039;<br/>ex:<br/>&nbsp;&nbsp;&nbsp;&nbsp;awk &#039;$0~/zhengxh/&#039; filename<br/>&nbsp;&nbsp;&nbsp;&nbsp;或awk &#039;&#123;if($0~/zhengxh/) print $0&#125; filename&nbsp;&nbsp;&nbsp;&nbsp;#输出含有zhengxh的行<br/>&nbsp;&nbsp;&nbsp;&nbsp;或awk &#039;/zhengxh/&#039; filename<br/><br/>(2)精确匹配<br/>$n==&quot;chars&quot;<br/>&nbsp;&nbsp;&nbsp;&nbsp;awk &#039;$1==&quot;zhengxh&quot; &#123;print $0&#125;&#039; filename&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;#输出第一列等于zhengxh的行<br/><br/>(3)反向匹配<br/>$n !~ /adf/<br/>&nbsp;&nbsp;&nbsp;&nbsp;awk &#039;$1 !~ /zhengxh/ &#123;print $0&#125;&#039; filename&nbsp;&nbsp;&nbsp;&nbsp;#输出第一列不是zhengxh的行<br/><br/>(4)大小写匹配<br/>&nbsp;&nbsp;&nbsp;&nbsp;awk &#039;/[zZ]hengxh/&#039;&nbsp;&nbsp;filename&nbsp;&nbsp;&nbsp;&nbsp; #匹配含有zhengxh 或是Zhengxh的字符串<br/>&nbsp;&nbsp; <br/>(5)使用或运算<br/>&nbsp;&nbsp;&nbsp;&nbsp;awk &#039;$0 ~ /(zhengxh&#124;hover)/&#039; filename&nbsp;&nbsp;&nbsp;&nbsp; #查找含有zhengxh或hover字串的行<br/>&nbsp;&nbsp;&nbsp;&nbsp;或awk &#039;&#123;if($0~/zhengxh/ OR $0~/hover/) print $0&#125;&#039; filename<br/><br/>(6)内置变量<br/>ARGC&nbsp;&nbsp;&nbsp;&nbsp;命令行参数个数<br/>ARGV&nbsp;&nbsp;&nbsp;&nbsp;命令行参数排列<br/>ENVIRON&nbsp;&nbsp;&nbsp;&nbsp;环境变量支持队列的<br/>FNR&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;浏览文件的记录数<br/>FS&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;设置输入域分隔符，与-F同<br/>NF&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;记录域的个数<br/>NR&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;已读的记录数<br/>OFS&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;输出域分隔符<br/>ORS&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;输出记录分隔符<br/>RS&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;控制记录分隔符<br/><br/><br/>awk 的具体运用(FAQ)<br/>* 把一个文件中满足条件的放到一个文件不满足条件的放到另一个文件<br/>awk -F: &#039;&#123;if(NF==6) print $0 &gt; &quot;yes&quot; else print $0 &gt; &quot;no&quot; &#125;&#039; filename<br/><br/><br/>*如何在awk中使用变量<br/>要注意的是在awk中的表达式一般是用&#039;&#039;号括起来的，在shell中单引号是全屏蔽符，所以用单引号使得变量无法生效，在使用shell变量时，可以这样使用<br/><br/>##########################<br/><br/>#/bin/sh<br/>#<br/><br/>name=&quot;zhengxh&quot;<br/><br/>count=`awk -F: &#039;<br/>&nbsp;&nbsp;&nbsp;&nbsp;/&#039;$&#123;name&#125;&#039;/&#123;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;#这里需要使用变量的地方把变量隔开<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;sum+=$3&nbsp;&nbsp; <br/>&nbsp;&nbsp;&nbsp;&nbsp;&#125;<br/>&nbsp;&nbsp; <br/>&nbsp;&nbsp;&nbsp;&nbsp;END &#123; print sum &#125;<br/>&#039;`<br/><br/>*使用awk输出文件的倒数第N行<br/>tail -n $N $filename &#124; awk &#039;&#123;if(NR==1) print $0&#125;&#039;<br/><br/>*)如何在AWK中使用外部变量<br/>1)aa=&quot;aaaaaaa&quot;<br/>awk &#039;&#123;print &quot;&#039;&quot;$&#123;aa&#125;&quot;&#039;&quot;&#125;&#039; $filename<br/>2)<br/>以下使用外部变量时有错:<br/>#!/bin/bash<br/>filepath=/etc/passwd<br/>user=root<br/>result=`awk -F&quot;:&quot; &#039;/$user/ &#123; print $1&#125;&#039; $filepath`<br/>echo $result<br/>$<br/>改正:<br/>awk -F&#039;:&#039; &#039;/&#039;&quot;$user&quot;&#039;/&#123;print $1&#125;&#039; $filepath<br/><br/><br/><br/><br/><br/>*如何把AWK中的值，传送到外部的SHELL变量<br/>使用$() 或 ``<br/>aa=`awk -F: &#039;&#123;print $0&#125;&#039; $filename`<br/><br/>*进行统计<br/>文件aa.txt<br/>一个用户可能有多个记录，这时只统计一次:<br/><br/>数据&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;用户ID&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;下载文件名称&nbsp;&nbsp; 用户所在地&nbsp;&nbsp;等。。。。。<br/>20071128,0001,1,null,600571021800,028 <br/>20071128,0002,1,null,600571001800,021<br/>20071128,0002,1,null,600571001802,021<br/>20071128,0003,1,null,600571031800,020<br/>20071128,0004,1,null,600571001800,010<br/><br/>统计各个的号码(最后一个字段)数量<br/>awk -F, &#039;&#123;if(!b[$2$6])&#123;a[$6]++;b[$2$6]++&#125;&#125;END&#123;for(i in a)&#123;print i,a[i]&#125;&#125;&#039;<br/><br/>*如何把多个语句放在一句话（一行）中处理<br/>cat &quot;$file&quot; &#124; awk &#039;&#123;ip=$1; i=index($0,&quot;&#92;google&quot;); if(i&gt;1)&#123;ua = substr($0,i); print ip &quot;&#92;t&quot; ua&#125;&#125;&#039;<br/><br/>*把记录<br/>aa,bb,cc [name, address, age]<br/>变成记录<br/>ip,aa,bb,cc [ip,name,address,age]<br/><br/>awk -F,&nbsp;&nbsp;&nbsp;&nbsp;&#039;&#123;pirntf &quot;&#92;&quot;192.168.5.154&#92;&quot;,&quot;$0&#125;&#039;<br/><br/>*取一个字符串的首字母<br/>str=abc<br/>echo $&#123;str:0:1&#125;<br/>echo $str&#124;awk &#039;&#123;print substr($0,1,1)&#125;&#039;<br/>echo $str&#124;sed &#039;s/&#92;(.&#92;).*/&#92;1/&#039;<br/><br/>*如何在一字符串的前面加上字符串 addtext<br/>awk &#039;&#123;print &quot;addtext &#92;&quot;&quot;$0&quot;&#92;&quot;&quot;&#125;&#039; temp<br/><br/>*计算不重复的列的总和<br/>aa&#124;001&#124;23<br/>ac&#124;001&#124;23<br/>bb&#124;002&#124;213<br/>cc&#124;004&#124;32<br/>dd&#124;005&#124;34<br/><br/>awk -F&#039;&#124;&#039; &#039;!a[$1]++&#123;sum+=$3&#125; END&#123;print sum&#125; &#039; filename<br/><br/>*定义多个分界符<br/>aa cc dd<br/>bb,ee ff<br/><br/>awk -F&#039;[ ,]&#039; &#039;&#123;print $3&#125;&#039; filename<br/> <br/>有时候有可能出现多个分隔符号，但是我们需要把它当成一个，这时就要用：<br/>***<br/>#echo &quot;adf::adf:f&quot; &#124; awk -F&#039;[:]+&#039; &#039;&#123;print $2&#125;&#039;<br/>#adf<br/>***<br/>#echo &quot;adf::adf:f&quot; &#124; awk -F&#039;:&#039; &#039;&#123;print $2&#125;&#039;<br/>#&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;#输出空<br/>***<br/><br/>*如何用awk处理这样的文件格式？<br/>源文件格式：<br/>&nbsp;&nbsp;<br/>表1313<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 客户经理业绩情况表（月报表）<br/>支局所名称：XXXX储蓄所&nbsp;&nbsp;&nbsp;&nbsp;月份：10&nbsp;&nbsp;&nbsp;&nbsp; <br/>客户经理<br/>业绩（累计日积数）<br/>酬金<br/>姓名&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;代号&nbsp;&nbsp;&nbsp;&nbsp; 活期&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 整整3月<br/>整整6月&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 整整1年&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;整整2年&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;整整3年<br/>整整5年&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 整整8年&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 零整1年&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 零整3年<br/>零整5年&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;定活两便&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br/>兰&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;37040576&nbsp;&nbsp;0.00&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 0.00&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 0.00<br/>0.00&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 0.00&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 0.00&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 0.00<br/>0.00&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 0.00&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 0.00&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 21340.00<br/>0.00&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 0.00&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br/>禚树征&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;37040585&nbsp;&nbsp;27277.21&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 120.00&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 0.00<br/>2965.22&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0.00&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 0.00&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 0.00<br/>0.00&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 0.00&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 0.00&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 0.00<br/>0.00&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 845615151469035520.00<br/>秦&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;37040502&nbsp;&nbsp;20094.30&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 0.00&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 0.00<br/>0.00&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 0.00&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 0.00&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 0.00<br/>0.00&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 0.00&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 0.00&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 0.00<br/>0.00&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 622937933443235840.00<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 合&nbsp;&nbsp;&nbsp;&nbsp; 计&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;444868.41&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0.00&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 0.00<br/>2965.22&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0.00&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 0.00&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 10764.20<br/>0.00&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 0.00&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 0.00&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 0.00<br/>18600.00&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 13791245122257916000.00<br/><br/>如何用awk处理成以下格式（只要里面的记录并用逗号分割每个字段，最后一个字段不要，表头和表尾不要）：<br/>&quot;兰&quot;,37040576,0.00,0.00,0.00,0.00,0.00,0.00,0.00,0.00,0.00,0.00,21340.00,0.00&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br/>&quot;禚树征&quot;,37040585,27277.21,120.00,0.00,2965.22,0.00,0.00,0.00,0.00,0.00,0.00,0.00,0.00<br/>&quot;秦&quot;,37040502,20094.30,0.00,0.00,0.00,0.00,0.00,,0.00,0.00,0.00,0.00,0.00,0.00<br/><br/>awk &#039;&#123;sub(&quot;[ &#92;t]&quot;, &quot;,&quot;); print $0&#125;&#039; temp<br/>awk &#039;&#123;sub(&quot;[ ,&#92;t]&quot;, &quot;,&quot;); print $0&#125;&#039; temp<br/><br/>*如何用TAB做分隔符号<br/>awk -F&#039;&#92;t&#039;<br/>awk -F&#039;[ &#92;t]&#039;&nbsp;&nbsp;#默认是这样，以空格或TAB做分隔符<br/>一般模式：awk -F&#039;rexp&#039; &#039;&#123;&#125;&#039; filename<br/>这里rexp是一个正则表达式，用来指示要使用的分隔符。<br/><br/><br/>*--------------------------<br/>在awk脚本中有下面一段<br/><br/>BEGIN&#123;split(&quot;123#456#789&quot;,team,&quot;#&quot;)&#125;<br/>END&#123;for(i in team) print team&#125;<br/><br/>预测的输出应该是<br/>123<br/>456<br/>789<br/>啊！<br/><br/>为什么实际的输出是<br/>456<br/>789<br/>123<br/>呢？<br/><br/>答:<br/>---<br/>while(++i in team) print team[i]<br/><br/>----------------------------<br/><br/>*-awk中使用system()<br/>answer:<br/>ls &#124; awk &#039;&#123;if (system(&quot;ls &quot; $0) == 0) &#123;print &quot;file &quot; $0 &quot; exists !&quot;&#125;&#125;&#039;<br/><br/><br/>*-调用外部命令和awk结合<br/>使用getline得到外部命令的输入f<br/> ls &#124; awk &#039;&#123;getline ll; print $ll&#125;&#039;<br/><br/>--------------------------<br/>*-只输出第一行的内容<br/>awk &#039;&#123;print; exit&#125;&#039;<br/><br/>*-多shell命令<br/>awk ’BEGIN&#123;while(&quot;dir&#124;sed 1,3!d&quot;&#124;getline)print $1&#125;‘<br/><br/>*-在awk的输出中加单引号<br/>#cat file<br/>rwxrwsrwx&nbsp;&nbsp; gprs&nbsp;&nbsp;&nbsp;&nbsp;512 GPRS<br/><br/>awk &#039;&#123;printf(&quot;%s %s &#039;&quot;&#039;%s&#039;&quot;&#039; %s&#92;n&quot;,$1,$2,$3,$4)&#125;&#039; file<br/>&nbsp;&nbsp;&nbsp;&nbsp;在这里要理解的是：上面的表达式分成了三块，前面的&#039;&#039;内的内容是一块，中间的双引号内的内容是一块，最后的单引号里的内容是一块；由于单引号在双引号中的作用被屏蔽，所以输出的变量会带上单引号。从而达到预定结果。<br/><br/>*-得到df -h 显示出来的百分数字(去掉百分号)<br/>(1)df -h &#124; awk &#039;&#123;if(NR!=1) print $5&#125;&#039; &#124; cut -d% -f 1<br/>(2)df -h &#124; awk -F&#039;[ &#92;t%]+&#039; &#039;&#123;if(NR!=1) print $5&#125;&#039;<br/><br/><br/>***<br/>实现加和<br/>中间结果如下所示：<br/>CPU usr sys idl<br/>0 13 4 76<br/>1 9 4 79<br/>要想显示下列结果：<br/>1 22 8 155<br/>***<br/>cat data &#124; awk &#039;&#123;if(NR!=1) a+=$1;b+=$2;c+=$3&#125; END&#123;print a,b,c,d,e&#125;&#039;<br/><br/>***<br/>如何实现以几个字母中任意一个打头的字符串的查找<br/>cat data<br/>Mike Harrington:(510) 548-1278:250:100:175<br/>Christian Dobbins:(408) 538-2358:155:90:201<br/>Susan Dalsass:(206) 654-6279:250:60:50<br/>Archie McNichol:(206) 548-1348:250:100:175<br/>Jody Savage:(206) 548-1278:15:188:150<br/>Guy Quigley:(916) 343-6410:250:100:175<br/>Dan Savage:(406) 298-7744:450:300:275<br/>Nancy McNeil:(206) 548-1278:250:80:75<br/>John Goldenrod:(916) 348-4278:250:100:175<br/>Chet Main:(510) 548-5258:50:95:135<br/>Tom Savage:(408) 926-3456:250:168:200<br/>Elizabeth Stachelin:(916) 440-1763:175:75:300<br/><br/>awk -F&#039;[ :]&#039; &#039;$1~/^[MJ] &#123;print $1&#125;&#039;<br/><br/>输出以D开头的域<br/>awk -F&#039;:&#039; &#039;&#123;for(i=1;i&lt;=NF;i++) if($i~/^D/) print $i&#125;&#039; data2<br/><br/><br/><br/>****每一行的和<br/>统计<br/>#cat ab<br/>a 1<br/>a 2<br/>b 2<br/><br/>awk &#039;&#123;a[$1]+=$2&#125; END&#123;for(i in a) print i,a[i]&#125;&#039; file<br/><br/><br/>-----------------------------------<br/>*对两个文件的处理<br/>----------<br/>大家好，想请教一个问题，我现在有两个文件，如下所示，这两个文件格式都是一样的。我想首先把文件2的第五列删除，然后用文件2的第一列减去文件一的第一列，把所得的结果对应的贴到原来第五列的位置，请问这个脚本该怎么编写？<br/>file1：<br/>50.481&nbsp;&nbsp;64.634&nbsp;&nbsp;40.573&nbsp;&nbsp;1.00&nbsp;&nbsp;0.00<br/>51.877&nbsp;&nbsp;65.004&nbsp;&nbsp;40.226&nbsp;&nbsp;1.00&nbsp;&nbsp;0.00<br/>52.258&nbsp;&nbsp;64.681&nbsp;&nbsp;39.113&nbsp;&nbsp;1.00&nbsp;&nbsp;0.00<br/>52.418&nbsp;&nbsp;65.846&nbsp;&nbsp;40.925&nbsp;&nbsp;1.00&nbsp;&nbsp;0.00<br/>49.515&nbsp;&nbsp;65.641&nbsp;&nbsp;40.554&nbsp;&nbsp;1.00&nbsp;&nbsp;0.00<br/>49.802&nbsp;&nbsp;66.666&nbsp;&nbsp;40.358&nbsp;&nbsp;1.00&nbsp;&nbsp;0.00<br/>48.176&nbsp;&nbsp;65.344&nbsp;&nbsp;40.766&nbsp;&nbsp;1.00&nbsp;&nbsp;0.00<br/>47.428&nbsp;&nbsp;66.127&nbsp;&nbsp;40.732&nbsp;&nbsp;1.00&nbsp;&nbsp;0.00<br/>51.087&nbsp;&nbsp;62.165&nbsp;&nbsp;40.940&nbsp;&nbsp;1.00&nbsp;&nbsp;0.00<br/>52.289&nbsp;&nbsp;62.334&nbsp;&nbsp;40.897&nbsp;&nbsp;1.00&nbsp;&nbsp;0.00<br/>file2：<br/>48.420&nbsp;&nbsp;62.001&nbsp;&nbsp;41.252&nbsp;&nbsp;1.00&nbsp;&nbsp;0.00<br/>45.555&nbsp;&nbsp;61.598&nbsp;&nbsp;41.361&nbsp;&nbsp;1.00&nbsp;&nbsp;0.00<br/>45.815&nbsp;&nbsp;61.402&nbsp;&nbsp;40.325&nbsp;&nbsp;1.00&nbsp;&nbsp;0.00<br/>44.873&nbsp;&nbsp;60.641&nbsp;&nbsp;42.111&nbsp;&nbsp;1.00&nbsp;&nbsp;0.00<br/>44.617&nbsp;&nbsp;59.688&nbsp;&nbsp;41.648&nbsp;&nbsp;1.00&nbsp;&nbsp;0.00<br/>44.500&nbsp;&nbsp;60.911&nbsp;&nbsp;43.433&nbsp;&nbsp;1.00&nbsp;&nbsp;0.00<br/>43.691&nbsp;&nbsp;59.887&nbsp;&nbsp;44.228&nbsp;&nbsp;1.00&nbsp;&nbsp;0.00<br/>43.980&nbsp;&nbsp;58.629&nbsp;&nbsp;43.859&nbsp;&nbsp;1.00&nbsp;&nbsp;0.00<br/>42.372&nbsp;&nbsp;60.069&nbsp;&nbsp;44.032&nbsp;&nbsp;1.00&nbsp;&nbsp;0.00<br/>43.914&nbsp;&nbsp;59.977&nbsp;&nbsp;45.551&nbsp;&nbsp;1.00&nbsp;&nbsp;0.00<br/><br/>--答--<br/>awk &#039;NR==FNR&#123;a[NR]=$1&#125;NR!=FNR&#123;$5=a[FNR]-$1;print&#125;&#039; file2 file1<br/><br/>说明：<br/>当NR==FNR时，是第一个文件，到了第二个文件时FNR会从0开始计数，而NR却继续在原来的基础上自增。<br/>先把第一个文件中要使用的内容保存到一个数组中，然后在处理第二个文件时才使用。<br/>这里包含了很好的处理多个文件的方法，值得借鉴。<br/>-------------------------------------------------<br/><br/><br/>**<br/>源文件如下：<br/>37123456,123456789,601234020200051640,&quot;孔霞&quot;,&quot;03&quot;,123456789,&quot;2008/01/06&quot;,1,4000,5060.41<br/>37123456,123456789,601234020200062521,&quot;栗汝礼&quot;,&quot;03&quot;,123456010,&quot;2008/01/06&quot;,1,100,110.91<br/>37123456,123456789,601234020200069800,&quot;柯纯龙&quot;,&quot;03&quot;,370786017,&quot;2008/01/06&quot;,1,20000,19500<br/>37123456,123456789,601234020200069800,&quot;柯纯龙&quot;,&quot;03&quot;,123456030,&quot;2008/01/06&quot;,1,31000,500<br/>37123456,123456789,601234020200068018,&quot;严凤书&quot;,&quot;03&quot;,123456789,&quot;2008/01/06&quot;,2,50000,100163.39<br/>37123456,123456789,601234020200070039,&quot;刘庆&quot;,&quot;03&quot;,123456789,&quot;2008/01/06&quot;,2,4000,8000<br/>37123456,123456789,601234020200060554,&quot;王兰英&quot;,&quot;03&quot;,123456789,&quot;2008/01/06&quot;,1,1600,91.26<br/>37123456,123456789,601234020200070039,&quot;刘庆&quot;,&quot;03&quot;,123456789,&quot;2008/01/06&quot;,2,4000,4000<br/>37123456,123456789,601234020200067710,&quot;罗有艳&quot;,&quot;03&quot;,123456789,&quot;2008/01/06&quot;,2,3000,12012.01<br/>37123456,123456789,601234020200064742,&quot;孙祥婷&quot;,&quot;03&quot;,123456789,&quot;2008/01/06&quot;,1,50,12.61<br/>37123456,123456789,601234020200069800,&quot;柯纯龙&quot;,&quot;03&quot;,123456030,&quot;2008/01/06&quot;,1,200,300<br/>37123456,123456789,601234020200060554,&quot;王兰英&quot;,&quot;03&quot;,123456789,&quot;2008/01/06&quot;,1,1000,1091.26<br/>处理要求如下：<br/>如果第三列中的数据是唯一的，就保留这一行，如果有重复的，就保留最后一个记录行。<br/><br/>--------答---------<br/>awk -F, &#039;&#123;a[$3]=$0&#125;END&#123;for( i in a)print a[i]&#125;&#039; urfile<br/><br/>------------------------------<br/><br/>*如何快速获取特定字符串的前2(n)行和后2(n)行<br/>$cat file<br/><br/>put 8<br/>put 9<br/>put 10<br/>abc<br/>put 11<br/>put 12<br/>put 13<br/>put 14<br/>abc<br/>put 15<br/>put 16<br/>put 17<br/>put 18<br/>abc<br/>put 19<br/>put 20<br/>put 21<br/>put 22<br/>put 23<br/>abc<br/>put 24<br/>put 25<br/>put 26<br/>put 27<br/>abc<br/>put 28<br/>put 29<br/>put 30<br/>put 31<br/>put 32<br/>abc<br/>put 33<br/>put 34<br/>put 35<br/>put 36<br/>put 37<br/><br/>$ awk &#039;&#123;a[NR]=$0&#125;/abc/&#123;for(i=2;i&gt;=0;i--) print a[NR-i];for(j=1;j&lt;=2;j++)&#123;if(!getline) exit;print&#125;print &quot;&quot;&#125;&#039; urfile<br/>小结：<br/>(1)这里使用了数组的功能,数组在作为缓存是普遍用法，要记住。<br/>但这里如果文件超大的话，缓冲区的负担太大，应换存自己需要的哪些行(这里我只换存了4行)<br/>$ awk &#039;&#123;a[NR%4]=$0&#125;/abc/&#123;for(i=2;i&gt;=0;i--) print a[(NR-i)%4];for(j=1;j&lt;=2;j++)&#123;if(!getline) exit;print&#125;print &quot;&quot;&#125;&#039; urfile<br/>(2)使用了getline函数-- $ man awk&nbsp;&nbsp;就知道，getline函数的作用是: 1)读取下一行2)set $0<br/>注意这两个元素的应用.<br/><br/><br/><br/>*)如何提取aaaa12123adsf adfadfbbbb 的aaaa和bbbb中间的内容<br/>$cat file<br/>adfaaaaadfadfadfdfadabbbb<br/>adfaaaaadf&nbsp;&nbsp;ad323452 adfadfdfadabbbbz<br/>$<br/>1)sed -e &#039;s/.*&#92;(aaaa&#92;)&#92;(.*&#92;)&#92;(bbbb&#92;).*/&#92;2/g&#039; file<br/>2)sed -e &#039;s/.*&#92;(a&#92;&#123;3&#92;&#125;&#92;)&#92;(.*&#92;)&#92;(b&#92;&#123;3&#92;&#125;&#92;).*/&#92;2/g&#039; file<br/>3)echo &quot;aaaa121312dfadfbbbbb&quot; &#124; awk -F&#039;aaaa&#124;bbbb&#039; &#039;&#123;print $2&#125;&#039;<br/><br/>*)我以如下字符要处理<br/><br/>a&nbsp;&nbsp;123<br/>b&nbsp;&nbsp;124<br/>c&nbsp;&nbsp; 125<br/>a&nbsp;&nbsp; 126<br/>d&nbsp;&nbsp; 127<br/>e&nbsp;&nbsp; 128<br/>ac&nbsp;&nbsp;129<br/><br/>如果第一列出现两次或两次以上将其打印出来，并计算出现次数。<br/>$ awk &#039;&#123;a[$1]++;&#125; END&#123;for(i in a) if(a[i]&gt;=2) &#123;print i,a[i]&#125;&#125;&#039; file<br/>分析: 由以上的命令可以得到流程：<br/>a[&quot;a&quot;] 2<br/>a[&quot;b&quot;] 1<br/>a[&quot;c&quot;] 1<br/>a[&quot;d&quot;] 1<br/>a[&quot;e&quot;] 1<br/>a[&quot;ac&quot;] 1<br/>而for(i in a)&nbsp;&nbsp;则是要遍历的i的值是：a,b,c,d,e,ac<br/><br/><br/><br/>*)去掉重复的行<br/>awk &#039;!a[$0]++&#039; file<br/><br/>*)去掉重复行，并保持顺序不变<br/>awk &#039;f[$0]!=1&#123;print;f[$0]=1&#125;&#039;<br/><br/>*)打印重复行<br/>1)awk &#039;&#123;a[$0]++&#125; END&#123;for(i in a) &#123;if(a[i]&gt;1)&#123;print i&#125;&#125;&#125;&#039; filename<br/>2)sort cc&nbsp;&nbsp;&#124; uniq -dc<br/><br/><br/><br/>*)如何匹配多个模式<br/>1)awk &#039;/p1&#124;p2/&#039; file<br/>2)awk &#039;/zhengxh&#124;&#92;&lt;root&#92;&gt;&#039; file<br/><br/>*)设定字段分隔符<br/>1)awk -F&#039;:&#039; &#039;&#123;OFS=&quot;-&quot;&#125;&#123;print $1,$2,$3&#125;&#039; file<br/><br/>*)范围查找<br/>1)awk -F&#039;:&#039; &#039;/20080501[2-9]/&#039; file<br/><br/>*)数字计算求和 file:<br/>hammers QTY: 5 PRICE: 7.99 TOTAL: 39.95<br/>drills QTY: 2 PRICE: 29.99 TOTAL: 59.98<br/>punches QTY: 7 PRICE: 3.59 TOTAL: 25.13<br/>drifts QTY: 2 PRICE: 4.09 TOTAL: 8.18<br/>bits QTY: 55 PRICE: 1.19 TOTAL: 65.45<br/>saws QTY: 123 PRICE: 14.99 TOTAL: 1843.77<br/>nails QTY: 800 PRICE: .19 TOTAL: 152<br/>screws QTY: 80 PRICE: .29 TOTAL: 23.2<br/>brads QTY: 100 PRICE: .24 TOTAL: 24<br/><br/>1)awk &#039;&#123;x=x+$2&#125;&#039; file<br/><br/><br/>*)<br/>---<br/>3&nbsp;&nbsp;0.022913642968727541<br/>2&nbsp;&nbsp; 0.022706007307485104<br/>2&nbsp;&nbsp;0.50444767354650166<br/>3&nbsp;&nbsp; 0.022128299612739447<br/>6&nbsp;&nbsp; 0.025468440060252208<br/>1&nbsp;&nbsp;0.022856042968727539<br/><br/>第一列相同则第二列对应值求和。。。输出$1，sum<br/>---<br/>1)awk &#039;&#123;a[$1]=+$2; b[&quot;2&quot;$1]++&#125; END&#123;for(i in a) if(b[&quot;2&quot;i]&gt;1) print i,a[i]&#125;&#039; file<br/><br/><br/>*)我以如下字符要处理<br/>a&nbsp;&nbsp;123<br/>b&nbsp;&nbsp;124<br/>c&nbsp;&nbsp; 125<br/>a&nbsp;&nbsp; 126<br/>d&nbsp;&nbsp; 127<br/>e&nbsp;&nbsp; 128<br/>ac&nbsp;&nbsp;129<br/><br/>如果第一列出现 两次或两次以上 将其打印出来，并计算出现次数。<br/><br/>1)awk &#039;&#123;a[$1]++&#125; END&#123;for(i in a) print i,a[i]&#125;&#039; file<br/>------<br/><br/>*)awk中如何显示大数据<br/>1)awk&nbsp;&nbsp;&#039;&#123;printf&quot;%.f&#92;n&quot;, NR + 1211439408282&#125;&#039;&nbsp;&nbsp; filename<br/><br/>*)awk使用外部变量<br/>1)awk &#039;&#123;if($3==&quot;&#039;$a&#039;&quot;) print $1,$2,&quot;&#039;$b&#039;&quot;,$4&#125;&#039; text<br/>2)awk &#039;&#123;if($3==&#039;&#92;&quot;$a&#92;&quot;&#039;) print $1,$2,&#039;&#92;&quot;$b&#92;&quot;&#039;,$4&#125;&#039; text<br/><br/>*)<br/>文件内容：<br/>74683 1001<br/>74683 1002<br/>74683 1011<br/>74684 1000<br/>74684 1001<br/>74684 1002<br/>74685 1001<br/>74685 1011<br/>74686 1000<br/>....<br/>100085 1000<br/>100085 1001<br/><br/><br/>文件就两列，希望处理成<br/>74683 1001 1002 1011<br/>74684 1000 1001 1002<br/>...<br/>就是只要第一列数字相同， 就把他们的第二列放一行上，中间空格分开<br/>--------------<br/>1) awk &#039;&#123;a[$1]=sprintf(&quot;%s %s&quot;, a[$1],$2)&#125; END&#123;for(i in a) print i,a[i]&#125;&#039; file<br/>2) awk &#039;&#123;a[$1]=a[$1]&quot; &quot;$2&#125; END&#123;for(i in a)print i,a[i]&#125;&#039; data13<br/><br/><br/>*)<br/>76523&nbsp;&nbsp;1001 1002<br/>76524&nbsp;&nbsp;1002 1003<br/>76526&nbsp;&nbsp;1000 1003<br/>76528&nbsp;&nbsp;1000<br/>....<br/>100025&nbsp;&nbsp;1000 1025<br/><br/>请教下， 文件第一列已按大小排序， 现在想按第一列的顺序， 把没有出现的行数补上<br/>实现<br/>76523&nbsp;&nbsp;1001 1002<br/>76524&nbsp;&nbsp;1002 1003<br/>76525<br/>76526&nbsp;&nbsp;1000 1003<br/>76527<br/>76528&nbsp;&nbsp;1000<br/>....<br/>100025&nbsp;&nbsp;1000 1025<br/><br/>怎样能够直接补上这些缺失的行<br/>-------------------<br/>1)???????<br/><br/><br/>*)<br/>每个字段形如 &lt;data name=&quot;CYRSBH&quot; value=&quot;320400725220211&quot;/&gt;，如何高效的提取value=&quot;*****&quot;中间的*** 望各位不吝赐教<br/>-------------<br/>1) grep -o &quot;value=.*&#92;&quot;&quot; data7 &#124; awk -F&#039;&quot;&#039; &#039;&#123;print $2&#125;&#039;<br/>2) sed &#039;s/.*value=&quot;&#92;(.*&#92;)&quot;.*/&#92;1/&#039; file<br/><br/><br/><br/>*)<br/>---<br/>两个文件<br/>a<br/>b<br/><br/>#cat a<br/>a1&nbsp;&nbsp;&nbsp;&nbsp;b=1&nbsp;&nbsp;num=3&nbsp;&nbsp;c=2<br/>a3&nbsp;&nbsp; b=1&nbsp;&nbsp; num=3&nbsp;&nbsp;c=3<br/>bc&nbsp;&nbsp;&nbsp;&nbsp;f=3&nbsp;&nbsp;&nbsp;&nbsp;num =2 f=3<br/>fa&nbsp;&nbsp;&nbsp;&nbsp; f=4&nbsp;&nbsp;&nbsp;&nbsp;num=2&nbsp;&nbsp;f=6<br/><br/>#cat b<br/>a4&nbsp;&nbsp;&nbsp;&nbsp;b=1&nbsp;&nbsp; num=6 c=3<br/>a1&nbsp;&nbsp;&nbsp;&nbsp;b=1&nbsp;&nbsp;num=5 c=2<br/>bc&nbsp;&nbsp;&nbsp;&nbsp;f=3&nbsp;&nbsp;&nbsp;&nbsp;num =1 f=3<br/>fb&nbsp;&nbsp;&nbsp;&nbsp;f=4&nbsp;&nbsp;&nbsp;&nbsp;num=3&nbsp;&nbsp;f=6<br/><br/><br/>要求对比两个文件<br/>条件1：如果文件a中有和文件b第1，2，4部分都相同的行则用文件b中该行的第三部分num=x<br/>其x的值减去文件a中该行第三部分num=x其x的值，并将结果连同该行的其他部分写入文件c<br/><br/>例如：<br/>文件b中第二行a1&nbsp;&nbsp;&nbsp;&nbsp;b=1&nbsp;&nbsp;num=5 c=2的第一部分：a1<br/>，第二部分b=1，第4部分c=2和文件a的第一行a1&nbsp;&nbsp;&nbsp;&nbsp;b=1&nbsp;&nbsp;num=3<br/>c=2相应部分相同则将结果<br/>a1&nbsp;&nbsp;&nbsp;&nbsp;b=1&nbsp;&nbsp;num=2 c=2&nbsp;&nbsp;&nbsp;&nbsp;写入文件c<br/>(num=2是文件b的num=5减去文件a的num=3的得来的)<br/><br/>条件2：如果条件1中num后数值相减后该结果为负值则将文件b中的该行直接写入文件c<br/>例如：b中的第三行bc&nbsp;&nbsp;&nbsp;&nbsp;f=3&nbsp;&nbsp;&nbsp;&nbsp;num =1 f=3与文件a中的第三行bc&nbsp;&nbsp;&nbsp;&nbsp;f=3&nbsp;&nbsp;&nbsp;&nbsp;num =2<br/>f=3的1，2，4部分相同，但是num后数值的运算结果为-1<br/>(1减2得来的)所以直接将文件b中的该行bc&nbsp;&nbsp;&nbsp;&nbsp;f=3&nbsp;&nbsp;&nbsp;&nbsp;num =1 f=3直接计入文件c<br/><br/>条件3：如果文件a中没有找到和文件b中1,2,4部分相同的行则将文件b中的该行直接写入文件c<br/>例如：文件b的第四行fb&nbsp;&nbsp;&nbsp;&nbsp;f=4&nbsp;&nbsp;&nbsp;&nbsp;num=3<br/>f=6，在文件a中无法找到和他第1，2，4部分相同的行所以直接将该行写入文件写入文件c<br/>条件4：a或者b本文本身中不会出现第1，2，4部分相同的行<br/>---<br/><br/>test.awk<br/><br/>#!/bin/awk -f<br/>NR==FNR &#123;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;sub(/.*=/ ,&quot;&quot; ,$3)<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;h[$1$2$4] = $3<br/>&#125;<br/>NR&gt;FNR &#123;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;i = 0<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;sub(/.*=/, &quot;&quot; ,$3)<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if($1$2$4 in h) &#123;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;i = $3 - h[$1$2$4]<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&#125;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(i&gt;0) $3 = &quot;num=&quot;i<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;else $3 = &quot;num=&quot;$3<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;print<br/>&#125;<br/><br/>awk -f test.awk a b &gt; c<br/><br/><br/><br/>*)awk对文件进行分流<br/>$cat file:<br/><br/>00:49:42.025791&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;14058101005&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;2008-05-31 09:41:2<br/>-00:00:34.974209&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;14058101003&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;2008-05-31 10:31:4<br/>...<br/>目的是把以00开头的行输出到一个文件，-00开头的行输出到一个文件，用一条awk语句可以实现么?<br/><br/><br/>*)<br/>如何在文件中使用awk设定的变量<br/>参考: #awk -v min=43922 -v max=52059 &#039;&#123;a[$1]&#125;END&#123;for(i=min;i&lt;=max;i++)if(!(i in a))print i&#125;&#039;<br/><br/>*)<br/>3&nbsp;&nbsp;0.022913642968727541<br/>2&nbsp;&nbsp; 0.022706007307485104<br/>2&nbsp;&nbsp;0.50444767354650166<br/>3&nbsp;&nbsp; 0.022128299612739447<br/>6&nbsp;&nbsp; 0.025468440060252208<br/>1&nbsp;&nbsp;0.022856042968727539<br/>。。。<br/>第一列相同则第二列对应值求和。。。输出$1，sum<br/><br/>这样的是错误的！！！<br/>#awk&nbsp;&nbsp;&#039;a[$1]+=$2; END&#123;for(i in a) print i,a[i]&#125;&#039; cata3<br/>right :<br/>awk&nbsp;&nbsp;&#039;&#123;a[$1]+=$2&#125; END&#123;for(i in a) print i,a[i]&#125;&#039; cata3<br/><br/><br/>*)<br/>有一个类似于这样的文本：<br/>16&nbsp;&nbsp;001agdcdafasd<br/>16&nbsp;&nbsp;002agdcxxxxxx<br/>23&nbsp;&nbsp;001adfadfahoh<br/>23&nbsp;&nbsp;001fsdadggggg<br/><br/>我想要得到<br/>16&nbsp;&nbsp;001<br/>16&nbsp;&nbsp;002<br/>23&nbsp;&nbsp;001<br/>23&nbsp;&nbsp;002<br/><br/>在awk中，就是取$2的前三个字符，但是不知道如何处理<br/>大家帮帮忙哦，先谢谢了：）<br/>----<br/><br/>1)awk &#039;&#123;print $1,substr($2,1,3)&#125;&#039;<br/>2)sed &#039;s/&#92;(.* ...&#92;).*/&#92;1/&#039; file<br/>3)grep -o &#039;^.&#92;+ &#92;+...&#039; file<br/><br/><br/>*)把文件 file<br/>CHN0401<br/>部门1组<br/>分部门查询<br/>吴斌<br/><br/>CHN0402<br/>部门2组<br/>查询<br/>李演<br/><br/>CHN0403<br/>部门3组<br/>查询<br/>李路<br/><br/>变为<br/>-------------------------------------------<br/>CHN0401 部门1组 分部门查询 吴斌<br/><br/>CHN0402 部门2组 查询 李演<br/><br/>CHN0403 部门3组 查询 李路<br/><br/>1)<br/>awk &#039;/CHN/&#123;h=$1; sub(&quot;&#92;n&quot;,&quot;&quot;,h); printf &quot;%s &quot;,h; for(i=0; i&lt;=3; i++) &#123;if(getline var) &#123; sub(&quot;&#92;n&quot;,&quot;&quot;,var);&#125; var=sprintf(&quot;%s &quot;, var); printf &quot;%s&quot;,var; &#125;print &quot;&quot;;&#125;&#039; file<br/><br/>2)<br/>$cat ff.awk <br/><br/><br/>#!/bin/awk -f<br/>#<br/>/CHN/&#123;<br/>&nbsp;&nbsp;&nbsp;&nbsp;h=$1;<br/>&nbsp;&nbsp;&nbsp;&nbsp;sub(&quot;&#92;n&quot;,&quot;&quot;,h);<br/>&nbsp;&nbsp;&nbsp;&nbsp;printf &quot;%s &quot;,h;<br/>&nbsp;&nbsp;&nbsp;&nbsp;for(i=0; i&lt;=3; i++)<br/>&nbsp;&nbsp;&nbsp;&nbsp;&#123;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(getline var)<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&#123;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;sub(&quot;&#92;n&quot;,&quot;&quot;,var);<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&#125;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;var=sprintf(&quot;%s &quot;, var);<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;printf &quot;%s&quot;,var;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&#125;<br/>&nbsp;&nbsp;&nbsp;&nbsp;print &quot;&quot;;<br/>&#125; file<br/><br/>$ff.awk filename<br/><br/>或<br/>#!/bin/awk -f<br/>#<br/>/CHN/&#123;<br/>&nbsp;&nbsp;&nbsp;&nbsp;s=$0;<br/>&nbsp;&nbsp;&nbsp;&nbsp;for(i=0; i&lt;=3; i++)<br/>&nbsp;&nbsp;&nbsp;&nbsp;&#123;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;getline<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;s=sprintf(&quot;%s %s&quot;, s,$0);<br/>&nbsp;&nbsp;&nbsp;&nbsp;&#125;<br/>&nbsp;&nbsp;&nbsp;&nbsp;printf &quot;%s&quot;, s;<br/>&nbsp;&nbsp;&nbsp;&nbsp;print &quot;&quot;;<br/>&#125; file<br/><br/><br/><br/>*替换特定行之间的行<br/>*) 替换注释行&lt;!-- --&gt;<br/>&lt;!-- &lt;mapping<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;resource=&quot;0.xml&quot; /&gt;--&gt;<br/>&lt;mapping resource=&quot;1.xml&quot; /&gt;<br/>&nbsp;&nbsp;&lt;mapping resource=&quot;2.xml&quot; /&gt;<br/>&lt;!-- &lt;mapping<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;resource=&quot;3.xml&quot; /&gt;<br/>--&gt;<br/>&nbsp;&nbsp;&lt;mapping resource=&quot;4.xml&quot; /&gt;<br/>&lt;!--<br/>&lt;mapping<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;resource=&quot;5.xml&quot; /&gt;<br/>--&gt;<br/><br/>&lt;!-- &lt;mapping resource=&quot;6.xml&quot; /&gt;--&gt;<br/>&nbsp;&nbsp;&lt;mapping resource=&quot;7.xml&quot; /&gt;<br/><br/>1)awk &#039;BEGIN&#123;RS=&quot;&lt;!--&#124;--&gt;&quot;&#125;NR%2&#039; urfile<br/><br/><br/>*)使用多个单词作为分隔符<br/>awk -F&#039;word1&#124;word2&#039; &#039;&#123;print $3&#125;&#039;<br/><br/><br/><br/>*) 把不同的结果定向到不同的文件中去<br/>有这样个文件<br/><br/>123&#124;0&#124;444<br/>123&#124;1.00&#124;444<br/>588&#124;222&#124;333<br/><br/>现在想把第2个字段为0的取出来输出到一个文件，并删除该记录，用awk如何实现，谢谢<br/>代码如下:<br/>-----------------------------------------------<br/><br/>[zhengxh@hoverzg stdshell]$ cat dd<br/>123&#124;0&#124;444<br/>123&#124;1.00&#124;444<br/>588&#124;222&#124;333<br/><br/>#注意在输出的文件名前面要加双引号<br/>[zhengxh@hoverzg stdshell]$ awk -F&#039;&#124;&#039; &#039;&#123;if($2==0)print &gt;&quot;file1&quot;; else print &gt;&quot;file2&quot;&#125;&#039; dd<br/>[zhengxh@hoverzg stdshell]$ cat file1<br/>123&#124;0&#124;444<br/>[zhengxh@hoverzg stdshell]$ cat file2<br/>123&#124;1.00&#124;444<br/>588&#124;222&#124;333<br/><br/>-----------------------------------------------<br/><br/>*)<br/>比如解析下面一行：<br/>123&#124;&#124;name&#124;&#124;address&#124;&#124;age<br/>我想以“&#124;&#124;”为分割符，这样各个域为“123”， “name”，“age”<br/><br/>1)awk -F&quot;[&#124;]+&quot; &#039;&#123;print $1&#125;&#039; filename<br/><br/><br/>*)单引号的输出<br/>1) awk &#039;BEGIN&#123;print &quot;&#039;&#92;&#039;看我的&#92;&#039;&#039;&quot;;&#125;&#039;<br/><br/><br/>*)找出不含指定字符串的行<br/>awk &#039;!(/abc/&#124;&#124;/def/)<br/>找出不含abc或者不含def的列作为条件<br/><br/>-----------------------------------------------<br/>[zhengxh@hoverzg stdshell]$ awk &#039;!(/dd/&#124;&#124;/1/) &#123;print &#125;&#039; dd<br/>588&#124;&#124;222&#124;&#124;333<br/>[zhengxh@hoverzg stdshell]$ cat dd<br/>123&#124;&#124;0&#124;&#124;444<br/>123&#124;&#124;1.00&#124;&#124;444<br/>588&#124;&#124;222&#124;&#124;333<br/><br/>-----------------------------------------------<br/><br/>*)只处理最后一行<br/>1)awk &#039;END&#123; print $0&#125;&#039; test<br/>2)tail -1 &#124; awk ...<br/><br/>*)只是处理第一行<br/>1) awk &#039;&#123;print $0; exit&#125;&#039; filename<br/>2) head -1 file &#124; awk ...<br/><br/>*)处理文件中指定的n行<br/>1) awk &#039;&#123;if(NR==n) print &#125;&#039;<br/>2) head -n &#124; tail -m &#124; awk ...<br/><br/>*) 某个文本文件，当逐行读取时，当发现第一个字段是空格或空值时（cut -d&#039;&nbsp;&nbsp;&#039;<br/>-f1），就将所在行与上行合并。<br/><br/>1)awk &#039;/^[^ &#92;t]/&#123;printf &quot;&#92;n&quot;$0&#125;; /^[ &#92;t]/&#123;printf $0&#125;END&#123;printf &quot;&#92;n&quot;&#125;&#039; file<br/>1*) awk &#039;BEGIN&#123;getline;printf $0&#125;/^[^ &#92;t]/&#123;printf &quot;&#92;n&quot;$0&#125;;&#92;<br/>&nbsp;&nbsp;&nbsp;&nbsp;/^[ &#92;t]/&#123;printf $0&#125;END&#123;printf &quot;&#92;n&quot;&#125;&#039; urfile<br/>#注意如果用print是不能实现的，因为print 会打印一个&#92;n<br/>解释：<br/>&nbsp;&nbsp;&nbsp;&nbsp;如果前面的字符不是空格就打印一个&#92;n，再打印这一行，<br/>&nbsp;&nbsp;&nbsp;&nbsp;如果是就直接打印但不换行<br/><br/>2)sed &#039;:a;N;/&#92;n[[:blank:]]&#92;+/&#123;s/&#92;n//;ba&#125;;P;D&#039; 数据文件<br/>解释：<br/>:a&nbsp;&nbsp;设置跳转标签<br/>N 读入下一行<br/>/&#92;n[[:blank:]]&#92;+/&#123;s/&#92;n//;ba&#125;<br/>如果下一行是以空白开头的话，就把换行符删除，<br/>然后再读取下一行，直到读取到不是以空白开头的行<br/>P; 打印第一个换行符之前的内容<br/>D; 删除第一个换行符之前的内容，并重新开始循环<br/><br/><br/>*)<br/>有个文件格式如下：<br/>aaa<br/>bbb<br/>ccc<br/>yyyuu<br/>jjjkkk<br/>sss<br/>aaa<br/>ccc<br/>。。。。<br/>有重复的字符串，要求对每个不一样的字符串计数并按计数的降序排列输出。输出的文件就只有各个不一样的字符串而已。<br/><br/>sort b &#124; uniq -c &#124; sort<br/><br/><br/><br/>*)<br/>$ cat file<br/>&nbsp;&nbsp;&nbsp;&nbsp;DAA=<br/>&nbsp;&nbsp;&nbsp;&nbsp;123413<br/>&nbsp;&nbsp;&nbsp;&nbsp;ZZASDF<br/>&nbsp;&nbsp;&nbsp;&nbsp;DAA=<br/>&nbsp;&nbsp;&nbsp;&nbsp;123413<br/>&nbsp;&nbsp;&nbsp;&nbsp;ZZASDF<br/>&nbsp;&nbsp;&nbsp;&nbsp;DAA=<br/>&nbsp;&nbsp;&nbsp;&nbsp;123413<br/>&nbsp;&nbsp;&nbsp;&nbsp;ZZASDF<br/><br/>$ awk &#039;BEGIN&#123;RS=&quot;DAA=&quot;&#125; &#123;gsub(/[^&#92;n]/,&quot;9&quot;,$0); if(length($0)&gt;0) printf &quot;%s %s&quot;,RS,$0&#125;&#039; file<br/><br/><br/>*)<br/>-----------------------<br/>各位大牛好：<br/>&nbsp;&nbsp;&nbsp;&nbsp; 小的有这样两个文件，记录不同查询出来的次数。<br/>文件一 a.txt，有两个字段，一个是次数，一个是pid，具体如下：<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;2 CC214798313J90000000000<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;1 CC214798119J90000006000<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;1 CC214790518J90000001000<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;1 CC214790518<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;1 CC214788013J90000005000<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;1 CC214788013<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;1 CC214783814J90000003000<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;1 CC214783814J90000002000<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;1 CC214783814<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;1 CC214778610<br/>文件二，b.txt ，也有两个字段，一个是次数，一个是pid，具体如下：<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;1 CC153301918J90000010000_765<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;1 CC120143642J90000043000_765<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;1 CC000024062J90033095000_765<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;1 CC000001583J90000044000_765<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;1 CC000001583J90000046000_768<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;1 CC130012773J90000076000_765<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;1 CC130012773J90000063000_765<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;1 CC130012773J90000064000_765<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;1 CC130012773J90000051000_765<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;1 CC130012773J90000052000_765<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;1 CC138037658J90000044000_538<br/><br/><br/>这两个文件记录的pid是可能相同的，我想把这两个文件组成一个文件：<br/>次数1 次数2 pid<br/>2 0 CC214798313J90000000000<br/>1 0 CC214798119J90000006000<br/><br/>也就是合并两个文件中的两个字段 ，组成三个字段的第三个文件。<br/>请假兄弟姐妹们。谢谢<br/>--<br/><br/><br/>*在指定行插入一行<br/><br/>awk &#039;1;NR==1&#123;print &quot;addadf&quot;&#125;&#039; file<br/><br/>-----------------------------------------<br/><br/><br/>*awk能实现对一个文件进行不同条件的匹配，然后按匹配的不同输出不同的文件吗？？<br/><br/><br/>比如这样的文件：<br/>##a1a1a1a1<br/>b1:<br/>@c1c1c1c1c1<br/>d1:<br/>%e1e1e1e1<br/><br/><br/><br/>##a2a2a2<br/>b2:<br/>@c2c2c2c2<br/>d2:<br/>%e2e2e2e2<br/><br/><br/>将满足#开头的记录输出的a文件，将@开头的记录输出的b文件，将%的文件输出到c文件<br/>所有操作希望通过一个脚本文件实现<br/><br/>这样条件我都知道怎么去配置就是不知道怎么按条件的不同输出啊，awk脚本能实现，如果不能怎么去实现它呢。<br/>希望大侠们指教呢<br/><br/>do:<br/>awk &#039;BEGIN&#123;FS=&quot;&quot;;a[&quot;#&quot;]=&quot;a&quot;;a[&quot;@&quot;]=&quot;b&quot;;a[&quot;%&quot;]=&quot;c&quot;&#125;($1 in a)&#123;print &gt; a[$1]&quot;.txt&quot;&#125;&#039; urfile<br/>awk &#039;BEGIN&#123;FS=&quot;&quot;;a[&quot;#&quot;]=&quot;a&quot;;a[&quot;@&quot;]=&quot;b&quot;;a[&quot;%&quot;]=&quot;c&quot;&#125;($1 in a)&#123;print &gt; a[$1]&quot;.txt&quot;&#125;&#039; urfile<br/><br/>来源：http://blog.chinaunix.net/u/28197/showart_2158273.html
]]>
</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>