从多行提取线性数据到一行 - awk

时间:2016-10-20 14:02:10

标签: bash awk

Add Column to text file using Heading value ( mutliple Heading in the file )类似,我想提取有提到服务器的数据,转移到一行。

示例数据

server1.domain.com
INFO XYUS
  OTHER INFO XYZ
     IP 1.2.3.4 ( name1.domain.com ) 
     IP 5.4.3.1 ( name1a.domain.com )
server2.domainlong.com
INFO 21323213
  OTHER INFO XYZ
     IP 4.2.3.4 ( nameS.domain.com ) 

我需要:

server1.domain.com,1.2.3.4,name1.domain.com
server1.domain.com,5.4.3.1,name1a.domain.com
server2.domainlong.com,4.2.3.4,nameS.domain.com

所以基本上用英语。

  • 我需要解析一个文本文件
  • 当我点击以domain.com结尾的行时开始收集 domainlong.com
  • 仅从以“IP”开头的行收集
  • 每条“IP”行生成一行(可以多于1行)
  • 当它结束以domain.com或结尾的新行时,移至下一组 domainlong.com

同样,这可能很简单 awk 但我不是专家......

提前感谢!

1 个答案:

答案 0 :(得分:1)

以下awk命令可以解决这个问题:

awk '/domain.*\.com$/{d=$0}/IP/{printf "%s,%s,%s\n",d,$2,$4}' file

说明:

  • 如果一行以domain.*\.com结尾,我们会将其存储到变量d
  • 如果某行包含术语IP,我们会打印ip和主机名以及d