shell-20-awk 若干判断手段,NR 行号, NF行总段数, = 和 ==

awk   在判断条件中的一些应用。

  1. 在判断条件中,比较字段                                      awk   -F   ':'   ' $3<$4 '    文件名
  2. 在判断条件中,同时有多个字段条件                    awk   -F   ':'   ' $3>5  &&  $4<7 '    文件名
  3. 完整的条件判断写法 { if( )  {  } }
  4. NR 当前行行号    NF 当前行的总段数    并可以作为判断条件
  5. shell中 = 赋值, == 等于,当作为条件时差别很大
  6. 复杂逻辑判断语句  awk  -F  ':'    '  { ( 条件 ) } ;   END { print   }  '    文件名

1)  俩个字段内容之间比较

2)  && 并且    || 或者                  可以用来设置多重判断条件

(这个例子用的 “ ” 把数字字符化了,则不是按照数字大小比较了,而是按照ASC码大小比较)

第三段大于数字1000 或者 第七段字符内容是 /sbin/nologin   ( ==表等于,内容需要完全符合而不仅仅是包含)

第三段大于数字1000 或者 第七段字符内容匹配 /bash/   ( ~表匹配,内容包含就是满足条件了)

OFS 指定打印时候所用到的分隔符。

用{ OFS=”#” } 表达新分隔符相当于 awk  -F  ':'  '{ print $1 # $3 # $7 }'   的表达方式

3)  其实之前都是省略的写法,完整的条件判断写法需要加 { if( )  { } }

4)  内置的变量  OFS分隔符   NR 当前行行号    NF 当前行对应的总段数

NR  NF  都可以作为判断条件

每行前打印NR行号出来,相当于打印  行号 + : + 行内容

打印每段对应的NF总分隔段数出来

可见这里每一行都是7段

把NR行号作为条件,比如:

打印前10行,即段号<=10

打印前10行并且是匹配 root 和sync 的行

打印每行中分隔段总数是6的,并且是匹配 root 和sync 的行

原文:

用NR和NF作为输出的段号的变量

例子如下:

第一行即是 $1 : $7

第二行即是 $2 : $7

第三行即是 $3 : $7

因为原文中段数最高到7,所以当NR>7的时候, $NR 没有数据了。

而原文中第一行中只有6段,输出$7 时候输出的实际上是$6的内容,猜测只要 >最后一段以后的段号都是和最后一段显示一个内容。

5)    =   赋值        ==  等于

$1 = ”root”   打印出来后所有行的第一段全被赋值成了 root

$1 == ”root”  仅仅匹配出了第一段中字符串是root的行

唯一问题就是 = 赋值后的打印出来的是空格作为分隔符,想要分隔符变回“:” 定义下OFS就好了。

6)   复杂逻辑判断语句写法:

 '  {  ( 条件 )  }   END { print   }  ' 

例子:所有行的第三段求和

tot没定义过所以起始值是0 ,第1行的第三段加上第2行的第三段再加上第3行第三段....最后输出结果

把打印的数字进行累加和:

awk '{sum+=$1}END{print sum}'

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值