Linux

linux + 通過 sed 或 awk 或 perl 從 CSV 文件創建主機文件

  • September 19, 2012

我有以下 CSV 文件

該文件定義了系統中存在哪台 Linux 機器以及 ip

我的目標是從此文件創建主機文件

請建議如何從我的 CSV 文件創建主機文件作為範例 1(我需要匹配 CSV 文件中的 IP 地址並將其放在主機文件的第一個欄位中,然後匹配 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

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";'

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

引用自:https://serverfault.com/questions/429775