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)  俩个字段内容之间比较

shell-20-awk 若干判断手段,NR 行号, NF行总段数, = 和 ==_第1张图片

 

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

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

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

shell-20-awk 若干判断手段,NR 行号, NF行总段数, = 和 ==_第2张图片

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

shell-20-awk 若干判断手段,NR 行号, NF行总段数, = 和 ==_第3张图片

 

 

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

shell-20-awk 若干判断手段,NR 行号, NF行总段数, = 和 ==_第4张图片

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

shell-20-awk 若干判断手段,NR 行号, NF行总段数, = 和 ==_第5张图片

 

 

 

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

shell-20-awk 若干判断手段,NR 行号, NF行总段数, = 和 ==_第6张图片

 

 

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

NR  NF  都可以作为判断条件

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

shell-20-awk 若干判断手段,NR 行号, NF行总段数, = 和 ==_第7张图片

 

 

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

可见这里每一行都是7段

shell-20-awk 若干判断手段,NR 行号, NF行总段数, = 和 ==_第8张图片

 

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

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

shell-20-awk 若干判断手段,NR 行号, NF行总段数, = 和 ==_第9张图片

 

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

 

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

 

 

 

原文:

shell-20-awk 若干判断手段,NR 行号, NF行总段数, = 和 ==_第10张图片

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

例子如下:

shell-20-awk 若干判断手段,NR 行号, NF行总段数, = 和 ==_第11张图片

第一行即是 $1 : $7

第二行即是 $2 : $7

第三行即是 $3 : $7

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

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

 

 

 

5)    =   赋值        ==  等于

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

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

shell-20-awk 若干判断手段,NR 行号, NF行总段数, = 和 ==_第12张图片

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

 

 

 

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

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

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

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

你可能感兴趣的:(Shell)