我试着处理50万行文字。在我看来,下面的代码是有效的,但似乎是非常不够的。我想通过使用awk来测试这个理论,看看我是否节省了一些时间。这个代码块通过我的脚本使用各种变量进行复制。这里节省的时间相当于脚本结束时节省的10倍。然而,我真的很难用awk来实现这一点。
剧本:
_regex_ipv4_ip_='((250-5|20-4|10-9|1-90-9).){3}(250-5|20-4|10-9|1-90-9)‘_regex_ipv4_cidr_='((0-9|1-9|10-9{2}|20-4|250-5).){3}(0-9|1-9|10-9{2}|20-4|250-5)(\/(0-9|1-2|30-2))’-v '^#‘${tmp}/url_* \ grep -Eho“${_regex_ipv4_ip_}\${_regex_ipv4_cidr_}”\x{tmp}}/ipv4
我要怎么做,只有沃克.搜索多个文件。排除线匹配模式。将bash变量引入awk。使用正则表达式模拟'grep -o‘。排序结果(不在乎它们是否只是bash中的' uniq‘所需的)模拟uniq写结果以文件
输入文件如下所示
# http://192.168.0.1/whatever #注释192.168.0.1 http://192.168.0.1/whatever/whatever 192.168.0.1 #评论192.168.0.0/16 192.168.0.0/16 #注释
复制删除后输出..。
192.168.0.1 192.168.0.0/16
更新: 1
我现在就在这里..。
这正是我想要的。
_regex_ipv4_ip_='192.168.0.1'
_regex_ipv4_cidr_='192.168.0.0/16'
awk -v exclude='#' -v include="${_regex_ipv4_ip_}" -v include2="${_regex_ipv4_cidr_}" '($0 !~ exclude) && match($0,include) && !seen[substr($0,RSTART,RLENGTH)]++ || match($0,include2) && !seen[substr($0,RSTART,RLENGTH)]++' /home/master/Desktop/t_*
但是,我无法正确地将包含在变量中的正则表达式正确地传递到awk中。
_regex_ipv4_ip_='((25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9]?[0-9])\.){3}(25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9]?[0-9])'
_regex_ipv4_cidr_='(([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])\.){3}([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])(\/([0-9]|[1-2][0-9]|3[0-2]))'
发布于 2015-09-07 16:55:37
你想要的是:
awk -v exclude='whatever' -v include='whatever' '
($0 !~ exclude) && match($0,include) && !seen[substr($0,RSTART,RLENGTH)]++
' file1 file2 ... fileN
但是,在您发布示例输入/输出之前,我们无法填写详细信息。
https://stackoverflow.com/questions/32442895
复制相似问题