Unix - изменить поле IP в CSV и вывести новый файл

Надеюсь на какой-то вклад по этому поводу, так как я борюсь. У меня есть csv, содержащий маску IP, в которой я хочу получить сетевой IP и широковещательный IP. Так, например, я хочу, чтобы поле ввода 1.0.0.0/24 выводило 2 новых поля, содержащих значения: 1.0.0.0 в одном и 1.0.0.255 в другом. У меня есть код для этого.

Для трансляции:

for i in $(cat geoip.csv);do bcaddr=$(ipcalc -n -b $i);echo 
${bcaddr#BROADCAST=};done

А для сети:

for i in $(cat geoip.csv);do bcaddr=$(ipcalc -n -4 $i);echo 
${bcaddr#BROADCAST=};done

Куда мне идти дальше? Как мне добавить эти 2 новых поля в новый выходной файл?

Заранее спасибо!

Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
0
0
63
2

Ответы 2

Почему бы не использовать awk?

Если вы используете Linux (не Unix):

for i in $(cat geoip.csv);do bcaddr=$(ipcalc -n -b  $i); echo $bcaddr | egrep -o '([0-9]+\.){3}[0-9]+' ; done > ip.txt

Выход:

1.0.0.255
1.0.0.0

Если вы хотите вывод в одну строку:

for i in $(cat geoip.csv);do bcaddr=$(ipcalc -n -b  $i); echo $bcaddr | egrep -o '([0-9]+\.){3}[0-9]+' ORS=' ' ; done}' > ip.txt

Выход:

1.0.0.255 1.0.0.0

Оба этих примера дают мне сообщение: «ipcalc: сетевая маска или ожидаемый префикс». Кроме того, я хочу, чтобы вывод был широковещательным, а сетевой IP (новые поля) находился в новом файле .csv, который содержит другие поля из исходного файла.

user3329160 23.05.2018 16:49

Red Hat Ent 5.10

user3329160 23.05.2018 20:36

Редактирую свой ответ

imjoseangel 23.05.2018 22:01

Спасибо. Похоже, что результаты отображаются на экране, а не в текстовом файле.

user3329160 23.05.2018 22:18

Конечно, вы должны перенаправить их с переадресацией > file.

imjoseangel 24.05.2018 06:11

Но как мне получить результаты, добавленные к существующему файлу - в новый файл вместе?

user3329160 24.05.2018 16:28

Для того же файла нужен sed. Перенаправить на новый файл.

imjoseangel 24.05.2018 18:06

посмотрите, работает ли это на RHEL 5.x ... вы хотите вывод в формате csv с разделителем запятой? for i in $(cat csip.csv); do echo "$i $(ipcalc -n -b $i | grep -E "Address|Broadcast" | awk {'print ","$2'} | tr '\n' ' ')" ; done > new.csv

Для вашей версии ipcalc попробуйте следующее: for i in $(cat csip.csv); do echo "$i $(ipcalc -n -b $i | grep -E "NETWORK|BROADCAST" | awk -F= {'print ","$2'} | tr '\n' ' ')" ; done > new.csv

Да, мне нужен вывод с разделителем запятой. Я попробовал ваше предложение. Он не добавляет новые необходимые поля, он просто печатает то, что уже есть в csv.

user3329160 24.05.2018 16:25

ответ обновлен, дайте мне знать, как это происходит. Если это не сработает, могу я увидеть ваш вывод ipcalc -n -b 1.0.0.0/24?

runwuf 24.05.2018 17:43

Привет, не сработало. Те же данные из источника, но между каждой строкой данных добавлены пустые строки. Выложил скриншоты здесь

user3329160 24.05.2018 20:15

Получил скриншот, см. Мой обновленный ответ, второй, который grep для NETWORK или BROADCAST

runwuf 24.05.2018 21:02

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