首页 > 解决方案 > 如何在excel表中保存默认端口和相应的端口

问题描述

我正在将执行结果保存在excel表中,结果如下所示

domainurl   http://example.com/
token.uri   https://example.com/
endpoint    https://example.com/
Points     10.15.13.18,10.13.13.26,10.15.13.4
host    10.15.19.21#10.5.17.2
port    8080#8080
host    10.3.4.16
port    1400
Points  10.35.13.18,10.35.23.16,10.115.13.14
host    abcd0001.unix.sty300.org
port    22

我想看到这样的结果

|A                                               |B
http://example.com/                                80
https://example.com/                               443
https://example.com/                               443
10.15.13.18,10.13.13.26,10.15.13.4                N/A
10.15.19.21,10.5.17.2                            8080
10.3.4.16                                         1400
10.35.13.18,10.35.23.16,10.115.13.14              N/A
abcd0001.unix.sty300.org                          22

注意:如果是 https 或 http 的端口应该默认为 443 或 80,而 N/A 表示没有端口。

这是我厌倦的代码

grep -P '((?<=[^0-9.]|^)[1-9][0-9]{0,2}(\.([0-9]{0,3})){3}(?=[^0-9.]|$)|(http|ftp|https|ftps|sftp)://([\w_-]+(?:(?:\.[\w_-]+)+))([\w.,@?^=%&:/+#-]*[\w@?^=%&/+#-])?|\.port|\.host|contact-points|\.uri)' $file | grep '^[^#]' | awk '{split($0,a,"="); print a[1],a[2]}' | awk '
BEGIN{
  #print "Filename hostname port"
}
/:[0-9]+/{
  sub(/:/,"\t")
  print;
  next
}
NF==2{
  if($NF~/[0-9]+\.[0-9]+\.[0-9]+\.[0-9]+/ || $NF~/[a-zA-Z,]+\..*\.[a-zA-Z,]+$/){
    val=$0
  }
  else{
    if(val){
      print val,$NF
      val=""
    }
  }
}'

感谢您的建议

标签: bashshellcsvawk

解决方案


与此输入一起工作的脆弱awk脚本

$ awk '/http:\/\//  {print $2,80} 
       /https:\/\// {print $2,443} 
       /Points/     {print $2,"NA"} 
       /host/       {h=$2} 
       /port/       {print h,$2; h=""}' file | column -t

http://example.com/                   80
https://example.com/                  443
https://example.com/                  443
10.15.13.18,10.13.13.26,10.15.13.4    NA
10.15.19.21#10.5.17.2                 8080#8080
10.3.4.16                             1400
10.35.13.18,10.35.23.16,10.115.13.14  NA
abcd0001.unix.sty300.org              22

PSnext在每个块中添加一个可以防止一些问题...


推荐阅读