当前位置: 首页 > article >正文

【awk 】如何将一个文件按照同名字段进行合并?

目录

  • 题目
  • 解答


题目

使用awk文本处理工具将一个名为c的文件按照同名字段进行合并,c的内容如下所示:

192.168.1.1: httpd
192.168.1.1: tomcat
192.168.1.2: httpd
192.168.1.2: postfix
192.168.1.3: mysqld
192.168.1.4: httpd

示例输出:

192.168.1.1: httpd tomcat
192.168.1.2: httpd postfix
192.168.1.3: mysqld
192.168.1.4: httpd

解答

awk 'BEGIN{FS=":";OFS=":"}{a[$1]=a[$1] $2}END{for(v in a)print v,a[v]}' c

解释:

  • BEGIN{} 分别定义了输入分隔符和输出分隔符

  • 中间BODY部分的{}展示了一个数组赋值操作。数组 a 的索引是每行的第一个字段(IP 地址),值是不断追加的第二个字段(服务名)。注意,这里使用了 a[$1] $2 的形式来追加服务名,意味着如果 a[$1] 已经有值(即之前已经遇到过相同的 IP 地址),那么新的服务名会被追加到已存在的值之后,前面会自动加上一个空格作为分隔符。

    比如:
    扫描到第一行时,$1=192.168.1.1 , $2=httpda[$1]=a[$1] $2 ==> a[192.168.1.1] = httpd
    扫描到第二行时,$1=192.168.1.1 , $2=tomcata[$1]=a[$1] $2 ==> a[192.168.1.1] = httpd tomcat
    以此类推

  • END{} 是在处理完所有输入行之后执行。这里是遍历数组 a,其中 v 是数组的索引(IP 地址),a[v] 是对应的值(所有相关服务名)。对于数组中的每个元素,都打印出其索引和值


http://www.kler.cn/a/286295.html

相关文章:

  • 【MySQL进阶】索引性能分析
  • 解决reCaptcha v2 Invisible:识别和参数
  • 使用MySQL划分收货地址后将数据添加到原表中
  • MySQL:多表查询
  • python网络爬虫(三)——爬虫攻防
  • Question mutiple pdf‘s using openai, pinecone, langchain
  • [pytorch] --- pytorch基础之transforms
  • Python算法L2:排序算法(详细版)
  • 前端提高Web/App/小程序开发效率的工具
  • CSS 的值与单位——WEB开发系列21
  • 【高阶数据结构】图的应用--最小生成树
  • 考研系列-408真题数据结构篇(10-17)
  • 003-LoadBalancer负载均衡服务调用
  • 钉钉-即时通讯-工作通知
  • 【ragflow】安装2:源码安装依赖
  • NVI技术创新联盟成立,BOSMA博冠IP轻量化制播已运用
  • 计算机毕业设计选题推荐-传统文化网站-Java/Python项目实战
  • 【Hot100】LeetCode—74. 搜索二维矩阵
  • SpringBoot——请求响应(简单参数、实体参数、数组集合参数、日期参数、JSON参数、路径参数、统一响应结果)
  • MySQL——事务与存储过程(一)事务管理(2)事务的提交