Bash help: colunas do awk

2
       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   

Olá pessoal, estou trabalhando em um shell script e tentando encontrar alguns endereços IP no grep / awk / sed. Cleaing up a saída é complicado. Observe que a linha inferior não tem um , . Eu estou tentando fazer algo como $ awk '{print , }' para filtrar as colunas IP e porta, mas isso não vai funcionar com a linha de fundo.

Parece que estou indo sobre o caminho errado. Como posso filtrar apenas os colomuns IP e port?

    
por captain21 27.04.2017 / 00:20

3 respostas

1

Como as colunas são invariantes, você poderia cut -c32- ( man cut ) o arquivo.

    
por waltinator 27.04.2017 / 01:15
0

Como sempre no Linux, há mais de uma maneira de fazer o trabalho. Coloquei o texto que você forneceu em file.txt . Aqui estão duas maneiras possíveis com base nas informações que você forneceu:

1. awk solution: Use a variável NF do awk para começar do último campo

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 solution: Use sed para remover a vírgula antes da mão

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

Note que em ambos os exemplos a primeira linha está um pouco fora porque existe um espaço entre "IP" e "endereço". Supondo que na saída real é um endereço IP real que não deve ser um problema. Além disso, o segundo exemplo pode não funcionar se você tiver outras instâncias na saída com as quais há uma vírgula importante necessária.

Por fim, esses comandos são baseados somente na saída e na pergunta fornecida. Pode ser que mais ajustes sejam necessários dependendo do que mais estiver no arquivo e / ou o que mais você está fazendo no seu script.

    
por TopHat 27.04.2017 / 03:58
0

Usando o grep:

grep -Po '(\d+\.){3}\d+\s+\d+'
    
por JJoao 08.05.2017 / 00:06