NEED : у меня есть файл, содержащий данные, как в примере ниже. Мне нужно:
- Объединить все строки в одну строку, когда число полей X соответствует
- Создать диапазон значений в количестве X полей, когда значения варьируются
В этом случае: объедините все строки в одну, где поля от $ 1 до $ 6 и $ 8 соответствуют , создайте диапазон связанных значений в поле $ 7
ИЛИ
Объединить все строки в одну, где совпадают поля от $ 1 до $ 7 , создать диапазон связанных значений в поле $ 8 *
Решение должно быть чем-то родным для Linux (например, bash или сценарий awk), которое не требует установки дополнительного программного обеспечения (например, datama sh).
Приведенное ниже решение @ rtx13 с использованием TCL работает (спасибо еще раз), я просто не уверен, смогу ли я установить TCL в моей среде, поэтому надеюсь и AWK / BASH / et c. Также может быть предложено решение.
Исходные данные:
HOST FILTER INTERFACE SOURCE DESTINATION PROTOCOL SOURCE PORT DESTINATION PORT
host1 input nic1 ip1 ip2 PROT 30000 10
host1 input nic1 ip1 ip2 PROT 50000 10
host1 input nic1 ip1 ip2 PROT 60000 10
host1 input nic1 ip3 ip2 PROT 10 30000
host1 input nic1 ip3 ip2 PROT 10 50000
host1 input nic1 ip3 ip2 PROT 10 60000
host1 output nic1 ip2 ip1 PROT 10 30000
host1 output nic1 ip2 ip1 PROT 10 50000
host1 output nic1 ip2 ip1 PROT 10 60000
host1 output nic1 ip2 ip3 PROT 30000 10
host1 output nic1 ip2 ip3 PROT 60000 10
host1 output loc ip2 ip2 PROT 10 30000
host1 output loc ip2 ip2 PROT 10 50000
Требуемый обработанный вывод:
host1 input nic1 ip1 ip2 PROT 30000:60000 10
host1 input nic1 ip3 ip2 PROT 10 30000:60000
host1 output nic1 ip2 ip1 PROT 10 30000:60000
host1 output nic1 ip2 ip3 PROT 30000:60000 10
host1 output loc ip2 ip2 PROT 10 30000:50000
Нужен ли мне отдельный файл, в котором перечислены порты, с которыми я хотел бы объединиться? Так как они также могут попасть в диапазон? Таким образом, сценарий может ссылаться на него, чтобы знать, является ли это портом слияния или нет?
10|EXAMPLE
22|SSH
80|HTTP
2049|NFS
*etc*
Я пытаюсь быть настолько точным, насколько это возможно c, поскольку мой первоначальный пост, как считалось, требует большего внимания ; он получил ответ (Спасибо, @Enrico Maria De Angelis), который был близок, но не совсем так же, как и тот, который использовал datama sh (Спасибо @oguz ismail), который работал великолепно, но, к сожалению, мне нужен Решение, не требующее установки дополнительного программного обеспечения: Объедините все строки, которые идентичны, кроме ключевого поля и сделайте ключевое поле диапазоном