2015-12-21 44 views
0

我必須閱讀大文件並查找FamlyType的出現次數。有一次,我發現,我需要分配faimlytype部旗下有我需要的變量賦值爲我做進一步的測試數據點的數量在什麼樣的..Awk Sed查找並將結果分配給多個變量

FamilyType 

FamilyKind    String  G 
userName:    String:  MATT_HANS 
serviceList:   String:   H2O 
hostList:    String:  159.220.108.80 
protocol:    String:   UDP 
portNumber:    Numeric:  8149 
port:     String:  TCPIP 


FamilyType 

FamilyKind    String  f 
userName:    String:  Geroge_lucas 
serviceList:   String:  WWW 
hostList:    String:  159.220.108.70 
protocol:    String:  TCP 
portNumber:    Numeric: 8166 
port:     String:  TCPIP 

,所以我需要寫一個在我的劇本找到Familtype例程然後分配用戶名& servicelist & hoslist和portNumebrto變量 所以結果應該是

請注意,有很多領先的空間的每一個變量

userName1="MATT_HANS" 
serviceList1="H2O" 
hostList1:"159.220.108.80" 
portNumber1="8149" 

userName2="Geroge_lucas" 
serviceList2="WWW" 
hostList2:"159.220.108.70" 
portNumber2="8166" 

我正在使用Bounre shell/Bash
是否有可能讓用戶sed或awk在一次運行中執行此操作?如果您提供任何幫助,請解釋命令;所以我可以在將來使用它

+4

對不起,但StackOverflow不是免費的編碼服務。預計你會寫出你自己的代碼。當你卡住了,你可以在你的Q中顯示你的輸入,所需的輸出,代碼,當前輸出和錯誤信息,然後我們可以幫助你。你至少有輸入和所需的輸出,所以...你在中途。祝你好運。 – shellter

+0

是的 - 我明白了 - 我真的不知道從哪裏開始我之前沒有做過這樣的事情 - 但是,謝謝你的回覆 – theuniverseisflat

+0

這沒什麼幫助 - 但我會看到我可以谷歌。 – theuniverseisflat

回答

3

awk來救援!

$ awk -v q="\"" '/FamilyType/{f=1} 
    f && /userName|serviceList|hostList|portNumber/ 
        {sub(":","1=",$1); 
        print $1 q $3 q 
        } 
      /port:/{f=0;print ""}' file 

userName1="MATT_HANS" 
serviceList1="H2O" 
hostList1="159.220.108.80" 
portNumber1="8149" 

userName1="Geroge_lucas" 
serviceList1="WWW" 
hostList1="159.220.108.70" 
portNumber1="8166" 

ps。你的hostList具有「:」符號,這將所有東西都轉換成「=」符號。如果不是拼寫錯誤,您需要專門處理它,但我沒有看到它的需要。

更新:爲變量後綴設置增量計數器。

$ awk -v q="\"" '/FamilyType/{f=1;c++} 
    f && /userName|serviceList|hostList|portNumber/ 
          {sub(":",c"=",$1); 
           print $1 q $3 q 
          } 
         /port:/{f=0;print ""}' file 

userName1="MATT_HANS" 
serviceList1="H2O" 
hostList1="159.220.108.80" 
portNumber1="8149" 

userName2="Geroge_lucas" 
serviceList2="WWW" 
hostList2="159.220.108.70" 
portNumber2="8166" 
+0

非常感謝。您的命令適用於以上輸入。在我的文件中,我在變量前有空格,所以我得到了很多其他數據。你能擺脫領先的空間嗎?不知道爲什麼它鼻涕工作saisnt我的文件 – theuniverseisflat

+0

也變量的第二個輸出應分配到2?不是一個否則這個被覆蓋 – theuniverseisflat

+0

請確保您的輸入/輸出代表您的實際數據(儘管簡化)。 – karakfa

相關問題