我想结合这两个命令:
命令1:
`BEGIN {
ip = ARGV[2]
split(ip, octets, ".")
for (i = 1; i <= 4; i++) {
dec += octets[i] * 256 ** (4 - i)
}
printf("%i\n", dec)
}`命令2:
`BEGIN{
FS=",";
}
{
if ($4 == dec){
print $7;
}
}
END {
print "END";
}`要读取的文件:
"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
发布于 2017-12-03 21:15:07
对你的2个文件进行连接可以做你想做的事情(在点击ARGV2之后,它就不会被当作文件处理):
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";
}但我建议你把它改写为:
BEGIN {
split(ip, octets, /[.]/)
for (i = 1; i <= 4; i++) {
dec += octets[i] * 256 ** (4 - i)
}
FS=","
}
$4 == dec {
print $7
}
END {
print "END"
}然后称之为:
awk -v 10101100.00010000.11111110.00000001 -f script.awk fileToRead.csv 只是把它整理一下。
https://stackoverflow.com/questions/47623333
复制相似问题