
又record 如下 -181 -13 kcg_true -181 kcg_true 1 kcg_true '~' ' ' 3 11 kcg_true -17 kcg_true -13 kcg_true '~' 'A' 7 181 kcg_true -17 kcg_true 181 kcg_true ' ' 'x' -181 -181 kcg_true 11 kcg_true -181 kcg_true 'A' 'x' ... 它们的nf的相等的; 但是我做[[ fieldNum == nf ]]会得出不相等 引起的原因是 ‘ ’中的空格也被当作FS了 怎么解决 让awk 判断出这些record的nf是相等的
by luyi1983 - Shell - 2009-09-01 01:46:27 阅读(1488) 回复(7)
nf:浏览记录的域个数。 nf:number of fields in the current record 照以上理解 $pwd /usr/local/etc $echo $PWD|awk -F/ '{print $nf}' etc $echo $PWD|awk -F/ '{print $nf}'应该显示域个数3才对啊。为什么会显示文件名etc呢?
BEGIN { FS="," chg_str="IP," if (length(des_ip) > 0){ ipaddr=des_ip } else { ipaddr="10.10.5.44" } } { #print "nf => " nf #print "nf => " $nf if ( NR == 1) { printf "%s",chg_str print $0 } else { printf "\"%s\",",ipaddr #print "nf => " nf for (i = 1; i <= nf; i++){ printf "%s",$i } #print $0 print "NR => " NR } } 程...
按照awk的使用手册,nf代表Number of fields in current record 但是下面 有这样一个文件: -bash-3.00$ cat testfile hz:zj wh:hb:zh 下面命令的输出为空: -bash-3.00$ cat testfile | awk -F: '/nf>2/ {print $3}' -bash-3.00$ 下面却又可以: -bash-3.00$ cat testfile | awk -F: '{if (nf > 2) print $3}' zh -bash-3.00$ 请问是为什么?谢谢!
在处理{}中用它还可以循环处理每一行{for (i=1;i<=nf;i++}... 但是到了 END{}里面,我想再添加一行统计信息{for (i=1;i<=nf;i++).....}就不行了...貌似nf=0了 怎么办?有什么更好方式麽?
例子: cd /usr/local echo $PWD | awk -F/ '{print $nf}' echo $PWD | awk -F/ '{print nf}' 第二个打印出来的是域的总数; 第一个打印出来的是 local,我的问题是:$nf是代表最后一个域值吗? 如果$代表句末,那我执行 echo $PWD | awk -F/ '{print ^nf}' 就报错了。所以$nf到底是代表什么,$代表什么? [ 本帖最后由 smz_f91 于 2007-10-26 11:52 编辑 ]
主机每天有一张报表,只有一行,但字符却有一千多个,我想以"|"为分隔符,取到指定字段,但如下awk却不行 [code]awk -F"|" '{if (nf=30) print $nf}' rpt0808.dat awk: record'521311501|沙区街储蓄所...' has too many fields input record number 2, file - soruce line 1 of program << {print nf} >> $wc rpt0808.dat 0 2 1410 rpt0808.dat [/code] 就是因为这一行太长而报错, 那要怎么做才能实现.谢谢 [quote] $cat ...
有一个文件如下: w aa n t ax d t ch ae f d jh ah s t ih s 我现在想显示每一行, 但每一行的最后一个字段不显示, 例如结果为: w aa n t ax t ch ae d jh ah s t ih 请问应该怎么实现啊, 先谢谢了