Назад | Перейти на главную страницу

linux + создать файл хоста из файла CSV с помощью sed, awk или perl

У меня есть следующий файл CSV

этот файл определяет, какая Linux-машина существует в системе, и есть IP-адреса

моя цель - создать файл хоста из этого файла

пожалуйста, посоветуйте, как создать файл хоста в качестве примера 1 из моего файла CSV (мне нужно сопоставить IP-адрес из файла CSV и поместить его в первое поле файла хоста, затем сопоставить имя LINUX и найти это имя в поле sec - как пример 1)

замечание - должно выполняться sed, awk или perl .., мне нужно написать решение в моем сценарии bash

CSV файл

    , machine , VM-LINUX1 , SZ , Phy ,  10.213.158.18 , PROXY

    , VM-LINUX2 , SZ , 10.213.158.19 ,

    OLD HW , VM-LINUX3 , SZ , 10.213.158.20 ,

    , VM-LINUX4 , SZ , Phy ,  10.213.158.21 ,

    , VM-LINUX5 , SZ , Phy , OUT , EXT , LAN3 , 10.213.158.22 , INTERNAL 

    , VM-LINUX6 , SZ , Phy ,  10.213.158.23 ,

    , server , new HW , VM-LINUX7 , SZ , Phy ,  10.213.158.24 , OUT, LAN3

    , VM-LINUX8 , SZ , 10.213.158.25 ,

    OLD HW , machine , VM-LINUX9 , SZ , Phy , INT , 10.213.158.26 , LAN2, AN45, 

    , VM-LINUX10 , SZ , Phy ,  10.213.158.27 ,

    , VM-LINUX11 , SZ , Phy ,  LAN5 , 10.213.158.28 ,

пример 1 (файл хоста)

    10.213.158.18 VM-LINUX1
    10.213.158.19 VM-LINUX2
    10.213.158.20 VM-LINUX3
    10.213.158.21 VM-LINUX4
    10.213.158.22 VM-LINUX5
    10.213.158.23 VM-LINUX6
    10.213.158.24 VM-LINUX7
    10.213.158.25 VM-LINUX8
    10.213.158.26 VM-LINUX9
    10.213.158.27 VM-LINUX10
    10.213.158.25 VM-MACHINE8


    10.213.158.26 STAR9
    10.213.158.27 TOP10
    10.213.158.28 SERVER11
perl -ne 'print "$1 $2\n" if m/(VM-LINUX\d+).*(\d+\.\d+\.\d+\.\d+)/;' < /PATH/TO/your.csv

или (если не определен даже порядок двух полей)

perl -ne 'print "$1 " if m/(VM-LINUX\d+)/; print "$1" if m/(\d+\.\d+\.\d+\.\d+)/; print "\n";' < /PATH/TO/your.csv

cat file | perl -ne '/(\w+-LINUX\w+).*\s([0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3})/;print "$2 $1\n";'