【技术案例】跟老男孩学运维-awk项目案例

一个awk数组应用案例

[TOC]

0.技术点:

  • awk
  • awk数组
  • awk判断
  • awk数组赋值
  • awk函数split

1.详细需求

有如下文本内容:完成如下所有需求:

  • 需求01:对第1列(根据逗号分割)进行去重操作,同时对2列(逗号和点分割)进行排序,取出第2列中最小的数字
说明:

  • 需求02:最终显示(以逗号和点分割)第1列内容,第2列,第3列内容
  • 需求03:如果第3列内容(逗号和点分割),如果有一样的,取第1个.
1000001,15.1R1
1000003,14.2R1
1000005,14.1R2
1000005,14.2R3
1000005,15.1R1
1000006,13.3R4
1000006,14.1R3
1000006,14.2R1
1000006,15.1R1
1000007,14.2R1
1000011,12.1X47-D15
1000014,15.1R1
1000020,15.1R1
1000021,14.2R1
1000024,15.1R1
1000031,14.1X51-D55
1000031,15.1R2
1000038,13.3R4-S1
1000038,13.3R5
1000038,14.1R3
1000038,14.2R1
1000038,15.1R1
1000039,14.2R1
1000039,15.1R1
1000053,15.1R1
1000060,13.3R3-S8
1000060,13.3R5-S3
1000060,13.3R7
1000060,14.1R5
1000060,15.1R1
  • 实现后的结果:
1000021,14.2R1
1000003,14.2R1
1000031,14.1X51-D55
1000014,15.1R1
1000005,14.1R2
1000060,13.3R3-S8
1000024,15.1R1
1000006,13.3R4
1000007,14.2R1
1000053,15.1R1
1000038,13.3R4-S1
1000039,14.2R1
1000001,15.1R1
1000020,15.1R1
1000011,12.1X47-D15

2. 实现

#简易版本
awk -F[,.] '{ if (!n[$1])n[$1]=$2;if (!m[$1]) m[$1]=$3;if($2

3. 解析

#简易版本
awk -F[,.] '{ 
    if (!n[$1])   #开关思想, !n[$1] 如果数组内容为空
        n[$1]=$2;           #则进行赋值, 用来存放第2列的数字,如果数字相同只保留第1个.
    if (!m[$1])   ##开关思想, !n[$1] 如果数组内容为空
        m[$1]=$3;           #则进行赋值, 用来存放第2列的数字,如果数字相同只保留第1个.
    if($2

你可能感兴趣的:(【技术案例】跟老男孩学运维-awk项目案例)