Bash 帮助:awk 列

Bash 帮助:awk 列
       120          ,     3     <IP address>   <port>   
       100          ,     3     xx.xxx.xx.xxx  xxxx      
       220          ,     3     xxx.xx.xxx.xxx  xxxx  
       280                3     xx.xxx.xx.xxx   xx   

大家好,我正在编写一个 shell 脚本,并尝试 grep/awk/sed 一些 IP 地址。清理输出很棘手。请注意,底线没有 ,。我试图做一些事情,比如$ awk '{print $4, $5}'过滤掉 IP 和端口列,但这对底线不起作用。

感觉我的方法不对。我怎样才能过滤掉 IP 和端口号?

答案1

由于列是不变的,因此您可以cut -c32-man cut)该文件。

答案2

与 Linux 中一样,完成工作的方法不止一种。我已将您提供的文本放入 中file.txt。根据您提供的信息,以下是两种可能的方法:

1. awk 解决方案:使用 awk 的 NF 变量从最后一个字段开始

linux-okrz:~# awk '{print $(NF-1), $(NF)}' file.txt
address> <port>
xx.xxx.xx.xxx xxxx
xxx.xx.xxx.xxx xxxx
xx.xxx.xx.xxx xx

2. sed 解决方案:使用 sed 预先删除逗号

linux-okrz:~# sed 's|,||g' file.txt | awk '{print $3, $4}'
<IP address>
xx.xxx.xx.xxx xxxx
xxx.xx.xxx.xxx xxxx
xx.xxx.xx.xxx xx

请注意,在这两个示例中,第一行略有偏差,因为“IP”和“address”之间有一个空格。假设实际输出中它是一个实际的 IP 地址,这应该不会有问题。此外,如果输出中还有其他实例需要重要的逗号,则第二个示例可能无法正常工作。

最后,这些命令完全基于提供的输出和问题。可能需要进一步调整,具体取决于文件中的其他内容和/或您在脚本中执行的其他操作。

答案3

使用 grep:

grep -Po '(\d+\.){3}\d+\s+\d+'

相关内容