我知道这是许多人提出的大多数查询的重复讨论,但是我没有得到任何合适的解决方案,只是在寻找awk命令的实用性。
我尝试从ifconfig输出中过滤MAC和IP地址。
Could not create image space with image file '/home/user/Documents/Android/out/host/linux-x86/framework/x86_64/core.art'. Attempting to fall back to imageless running. Error was: Cannot compile image to /home/user/Documents/Android/out/host/datadir/dalvik-cache/x86_64/dalvik-cache/x86/home@user@Documents@Android@out@host@linux-x86@framework@x86_64@core.art: Image compilation disabled.
当前,我正在尝试通过匹配HWADDR进行打印,然后检查第二行,然后检查下一行。
Link encap:Ethernet HWaddr xx:xx:xx:xx:xx:xx
inet addr:192.xx.xx.xx Bcast:192.xx.xx.xx Mask:255.255.255.0
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
xx:xx:xx:xx:xx:xx:xx 192.168.xx.xx
我的问题是如何搜索到上一行。例如:-如果我将第二行的IP地址与之匹配,则如何反向搜索第一行,例如
awk '/HWaddr/{printf $NF;printf " ";getline;print $2;}' <filename> | cut -c1-18,24-
根据对前一行的检查,此处我匹配的IP从192开始。我可以知道什么是getline的反向搜索,我的意思是反向搜索的指令
仅使用awk实用程序查看
答案 0 :(得分:2)
能否请您尝试以下操作,如果有帮助,请告诉我。
awk '/[0-9]+\.[0-9]+\.[0-9]+\.[0-9]+/{print $2 OFS prev} {prev=$0}' Input_file
答案 1 :(得分:2)
最简单的方法是将前一行存储在变量中,然后在需要时引用它。例如,使用以下awk
脚本:
/192/ {print lastline}
{ lastline=$0 }
如果我给它以下位置:
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000
link/ether 64:00:6a:7d:06:1a brd ff:ff:ff:ff:ff:ff
inet 192.168.1.24/24 brd 192.168.1.255 scope global dynamic eth0
valid_lft 67513sec preferred_lft 67513sec
inet6 fe80::5da1:2401:a725:d2e0/64 scope link
valid_lft forever preferred_lft forever
我得到输出:
link/ether 64:00:6a:7d:06:1a brd ff:ff:ff:ff:ff:ff
当然,接口可以有多个地址,这会失败 如果您的界面看起来像例如
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000
link/ether 64:00:6a:7d:06:1a brd ff:ff:ff:ff:ff:ff
inet 172.16.32.1/24 brd 172.16.32.255 scope global dynamic eth0
valid_lft 67513sec preferred_lft 67513sec
inet 192.168.1.24/24 brd 192.168.1.255 scope global dynamic eth0
valid_lft 67513sec preferred_lft 67513sec
inet6 fe80::5da1:2401:a725:d2e0/64 scope link
valid_lft forever preferred_lft forever
与其查看“上一行”,不如明确地显示 记录MAC地址:
/192/ {print hwaddr}
/link\/ether/ {hwaddr=$0}
这将始终打印出前link/ether
行的值。