Надеюсь на какой-то вклад по этому поводу, так как я борюсь. У меня есть 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 новых поля в новый выходной файл?
Заранее спасибо!





Почему бы не использовать 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
Red Hat Ent 5.10
Редактирую свой ответ
Спасибо. Похоже, что результаты отображаются на экране, а не в текстовом файле.
Конечно, вы должны перенаправить их с переадресацией > file.
Но как мне получить результаты, добавленные к существующему файлу - в новый файл вместе?
Для того же файла нужен sed. Перенаправить на новый файл.
посмотрите, работает ли это на 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.
ответ обновлен, дайте мне знать, как это происходит. Если это не сработает, могу я увидеть ваш вывод ipcalc -n -b 1.0.0.0/24?
Привет, не сработало. Те же данные из источника, но между каждой строкой данных добавлены пустые строки. Выложил скриншоты здесь
Получил скриншот, см. Мой обновленный ответ, второй, который grep для NETWORK или BROADCAST
Оба этих примера дают мне сообщение: «ipcalc: сетевая маска или ожидаемый префикс». Кроме того, я хочу, чтобы вывод был широковещательным, а сетевой IP (новые поля) находился в новом файле .csv, который содержит другие поля из исходного файла.