首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >AWK脚本文件:合并2个命令

AWK脚本文件:合并2个命令
EN

Stack Overflow用户
提问于 2017-12-03 21:09:24
回答 1查看 44关注 0票数 0

我想结合这两个命令:

命令1:

代码语言:javascript
运行
复制
`BEGIN {
    ip = ARGV[2]
    split(ip, octets, ".")
    for (i = 1; i <= 4; i++) {
        dec += octets[i] * 256 ** (4 - i)
    }
    printf("%i\n", dec)
}`

命令2:

代码语言:javascript
运行
复制
`BEGIN{
    FS=",";
}
{
    if ($4 == dec){
        print $7;
    }
}
END {
    print "END";
}`

要读取的文件:

代码语言:javascript
运行
复制
"16777216","16777471","apnic","1313020800","AU","AUS","Australia"
"16777472","16777727","apnic","1302739200","CN","CHN","China"
"16777728","16778239","apnic","1302739200","CN","CHN","China"
"16778240","16779263","apnic","1302566400","AU","AUS","Australia"
"16779264","16781311","apnic","1302566400","CN","CHN","China"

第一个命令用于将IPV4地址转换为十进制,第二个命令用于搜索.csv文件中的十进制。

因此,我想使用如下命令:awk -f script.awk fileToRead.csv 10101100.00010000.11111110.00000001

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-12-03 21:15:07

对你的2个文件进行连接可以做你想做的事情(在点击ARGV2之后,它就不会被当作文件处理):

代码语言:javascript
运行
复制
BEGIN {
    ip = ARGV[2]
    split(ip, octets, ".")
    for (i = 1; i <= 4; i++) {
        dec += octets[i] * 256 ** (4 - i)
    }
    ARGV[2] = ""
    ARGC--
}

BEGIN{
    FS=",";
}
{
    if ($4 == dec){
        print $7;
    }
}
END {
    print "END";
}

但我建议你把它改写为:

代码语言:javascript
运行
复制
BEGIN {
    split(ip, octets, /[.]/)
    for (i = 1; i <= 4; i++) {
        dec += octets[i] * 256 ** (4 - i)
    }
    FS=","
}
$4 == dec {
    print $7
}
END {
    print "END"
}

然后称之为:

代码语言:javascript
运行
复制
awk -v 10101100.00010000.11111110.00000001 -f script.awk fileToRead.csv 

只是把它整理一下。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/47623333

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档