Справка 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   

Эй парни, я работаю над сценарием оболочки и пробую к grep/awk/sed некоторые IP-адреса. Cleaing вывод хитер. Заметьте, что нижняя строка не имеет a ,. Я пытаюсь сделать soemthing как $ awk '{print $4, $5}' для отфильтровывания IP и столбцов порта, но это не будет работать с нижней строкой.

Чувствует, что я иду об этом неправильным путем. Как я могу отфильтровать просто IP и порт colomuns?

1
задан 27 April 2017 в 01:20

3 ответа

Так как столбцы являются инвариантными, Вы могли cut -c32- (man cut) файл.

0
ответ дан 8 December 2019 в 05:34

Как всегда в 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" и "адресом". Предположение, что в реальном выводе это - фактический IP-адрес, который не должен быть проблемой. Кроме того, второй пример не может работать, если у Вас есть другие экземпляры в выводе, с которым существует важная запятая, которая необходима.

Наконец, эти команды базируются только на выводе и обеспеченном вопросе. Могло случиться так, что дальнейшая тонкая настройка будет необходима в зависимости от того, что еще находится в файле и/или что еще Вы делаете в своем сценарии.

0
ответ дан 8 December 2019 в 05:34

Используя grep:

grep -Po '(\d+\.){3}\d+\s+\d+'
0
ответ дан 8 December 2019 в 05:34

Другие вопросы по тегам:

Похожие вопросы: