【发布时间】:2020-03-06 05:03:12
【问题描述】:
我是AWK的新手,提前感谢您的建议。
我在这里有一个问题,我得到如下所示的单行而不是多行的输出
hostname port
http://example.com/token 80
https://digits.com 443
https://examples.demo.com?grant_type 443
http://demo/paying/security/tokens/demoitexample.com 80
http://demo/paying/security/tokens/demoitexample1.com 80
http://demo/paying/security/tokens/demoitexample2.com 80
http://demo/paying/security/tokens/demoitexample2.com 80
但我想在不手动更改 csv 文件的情况下获得如下输出
预期输出如下图
hostname,port
http://example.com/token,80
https://digits.com,443
https://examples.demo.com?grant_type,443
http://demo/paying/security/tokens/demoitexample.com,80
http://demo/paying/security/tokens/demoitexample1.com,80
http://demo/paying/security/tokens/demoitexample2.com,80
http://demo/paying/security/tokens/demoitexample2.com,80
这是我得到输出的代码,如果我们可以将两个命令组合在一个命令中,那就太好了。
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|\.endpoint)' abc.properties| grep '^[^#]'| awk '{split($0,a,"#"); print a[1]}' | awk '{split($0,a,"="); print a[1],a[2]}'|sed 's/^\|#/,/g'|awk '/http:\/\// {print $2,80}
/https:\/\// {print $2,443}
/Points/ {print $2,"9042"}
/host/ {h=$2}
/port/ {print h,$2; h=""}'|awk -F'[, ]' '{for(i=1;i<NF;i++){print $i,$NF}}'| column -t
【问题讨论】: