美文网首页
awk语法-02-运算、数组、格式化输出

awk语法-02-运算、数组、格式化输出

作者: 玄德公笔记 | 来源:发表于2022-08-02 22:32 被阅读0次

1. 比较运算

1.1 说明

符号 说明
> 大于
< 小于
>= 大于等于
<= 小于等于
== 等于
!= 不等于
~ 匹配
!~ 非匹配

1.2 示例

查看普通用户

即id号大于等于1000的用户

[root@liubei ~]# awk -F: '$3>=1000{print $1,$3}' /etc/passwd
cloud_user 1000
liubei 1001
guanyu 1002

查看非root用户

id非0的用户

[root@liubei ~]# awk -F : '$1!="root"{print $1,$3}' /etc/passwd
bin 1
daemon 2
adm 3
lp 4
……
liubei 1001
guanyu 1002
guanping 1003

匹配

[root@liubei ~]# awk -F : '$1~"uan"{print $1,$3}' /etc/passwd
guanyu 1002
guanping 1003

匹配支持正则

  • 包含 guan.*g的用户
[root@liubei ~]# awk -F : '$1~"guan.*g"{print $1,$3}' /etc/passwd
guanping 1003
  • l开头的用户
[root@liubei ~]# awk -F : '$1~"\\<l.*"{print $1,$3}' /etc/passwd
lp 4
liubei 1001

2. 算术运算

2.1 说明

符号 说明
+
-
*
/
% 取余
^

2.2 示例(打印奇数id的用户)

[root@liubei ~]# awk -F: '$3%2==1{print $1,$3}' /etc/passwd
bin 1
adm 3
sync 5
halt 7
operator 11
nobody 99
dbus 81
polkitd 999
postfix 89
liubei 1001
guanping 1003

3. 逻辑运算

3.1 说明

符号 说明
&&
|

3.2 示例(打印非系统用户)

即 root(id=0)和普通用户(id>=1000)

[root@liubei ~]# awk -F: '$3==0||$3>=1000{print $1,$3}' /etc/passwd
root 0
cloud_user 1000
liubei 1001
guanyu 1002
guanping 1003

4. 数组

4.1 创建数组

语法

数组名[索引]=值

示例

  • 创建 test.awk内容如下
#!/bin/awk -f
BEGIN{
  user[0]="liubei";
  user[1]="guanyu";
  print user[0],user[1]
}
  • 执行
[root@liubei ~]# ./test.awk
liubei guanyu

4.2 删除数组

语法

delete 数组名[索引]

示例

  • 创建test.awk文件如下
#!/bin/awk -f
BEGIN{
  user[0]="liubei";
  user[1]="guanyu";
  delete user[1];
  print user[0],user[1]
}
  • 执行
[root@liubei ~]# ./test.awk
liubei

5. printf 格式化输出

和其他语言没有什么区别,简单示例一下:

接收类型

awk -F: '{printf "%s %s \n", $1,$3}' /etc/passwd

说明: %s 字符型,%d 整数型,%f 浮点型

定义列宽

在接收类型中间可以添加数字表示列宽。

  • 语法示例
awk -F: '{printf "|%20s|%20s\n", $1,$3}' /etc/passwd
  • 执行结果
|                root|                    0
|                 bin|                    1
|              daemon|                    2
|                 adm|                    3
|                  lp|                    4
……

对齐方式

在列宽两侧加-,表示字串靠哪个方向对齐(默认右对齐)。

  • 语法示例
awk -F: '{printf "|%-20s|%-20s\n", $1,$3}' /etc/passwd
  • 执行结果
|root                |0
|bin                 |1
|daemon              |2
|adm                 |3
|lp                  |4
……

完整示例

  • 创建myAwk.awk 文件如下
#!/bin/awk -f
BEGIN{
  FS=":";
  line="============================================";
  printf "|%-20s|%-20s|%-20s\n%s\n","Type","Name","Id",line
}
{

  if($3==0){
    printf "|%-20s|%-20s|%-20s\n","root_user",$1,$3
  }else if($3>=1000){
    printf "|%-20s|%-20s|%-20s\n", "ord_user",$1,$3
  }else{
    printf "|%-20s|%-20s|%-20s\n", "sys_user",$1,$3
  }
}

  • 执行
[root@liubei ~]# ./myAwk.awk /etc/passwd
|Type                |Name                |Id
============================================
|root_user           |root                |0
|sys_user            |bin                 |1
|sys_user            |daemon              |2
|sys_user            |adm                 |3
|sys_user            |lp                  |4
|sys_user            |sync                |5
|sys_user            |shutdown            |6
|sys_user            |halt                |7
|sys_user            |mail                |8
|sys_user            |operator            |11
|sys_user            |games               |12
|sys_user            |ftp                 |14
|sys_user            |nobody              |99
|sys_user            |systemd-network     |192
|sys_user            |dbus                |81
|sys_user            |polkitd             |999
|sys_user            |sshd                |74
|sys_user            |postfix             |89
|sys_user            |chrony              |998
|ord_user            |cloud_user          |1000
|ord_user            |liubei              |1001
|ord_user            |guanyu              |1002
|ord_user            |guanping            |1003

相关文章

  • awk语法-02-运算、数组、格式化输出

    1. 比较运算 1.1 说明 符号说明>大于<小于>=大于等于<=小于等于==等于!=不等于~匹配!~非匹配 1....

  • 20170904 awk

    awk介绍awk变量printf命令:实现格式化输出操作符awk patternawk actionawk数组aw...

  • awk

    awk:报告生成器,格式化文本输出 内容: awk介绍 awk基本用法 awk变量 awk格式化 awk操作符 a...

  • Java 字符串

    String & StringBuilder 格式化输出 正则sed & awk

  • awk基础01-基本用法

    什么是awk     awk 是一门解释型的编程语言,支持条件判断,数组、循环等功能。可用于文本处理、输出格式化的...

  • awk

    1.awk介绍  awk:Aho, Weinberger, Kernighan,报告生成器,格式化文本输出 有...

  • AWK

    awk介绍 awk :Aho, Weinberger, Kernighan,报告生成器,格式化文本输出 有多种版本...

  • AWK的使用

    AWK语法: awk -F/f/v/ + ‘pattern’ +文件全路径或者:标准输出|awk -F/f/v/...

  • sed awk 用法示例

    sed 的主要作用是替换,awk 作用是格式化输出 样本文件 命令 输出

  • 笔记-awk

    1.Awk基础介绍 2.awk语法格式 2.Awk工作原理 3.Awk内部变量 4.Awk格式输出 5.Awk模式...

网友评论

      本文标题:awk语法-02-运算、数组、格式化输出

      本文链接:https://www.haomeiwen.com/subject/hfzjwrtx.html