2014-10-28 147 views
1

我有一個awk腳本,它通過日誌文件 腳本解析:awk腳本中的命令行輸入?

BEGIN{ 
    print "ID", "vFiler", "Type", "host" 
} 
/=====/{ 
    vFiler=$2 
    next 
} 
match($0,/root=[^,]*/){ 
    n=split(substr($0,RSTART+5,RLENGTH-5),N,/:/) 
    for(i=1; i<=n; i++)print vFiler,$1,N[i]; 
} 

現在我的問題,你可以看到有一個ID設置爲啓動,這應該意味着在每次鍵入在腳本運行之前,因爲這些文件每次都有不同的ID。所以我想知道我該怎麼做,寫一個shell腳本來執行這個操作並執行awk腳本。或者有沒有辦法在awk腳本中編寫這個代碼(也許使用getLine ?!)?

輸出我要實現的是:

ID,vFiler,Type,host 
1,vfiler0,/vol/vol0,fapra8.net 
4,vfiler1,/vol/lnxpjmmorena,fcvapd10.net 
4,vfiler1,/vol/CSArchive,fcvapd11.net 

(在謝勝利情況下,ID將保持不變,因爲服務器都列在同一類型)

執行腳本之後,應該說像「輸入ID」或類似的東西。

如果不能在awk腳本中完成請不要讓寫一個shell腳本(一般我只是想知道我怎麼能做到這一點,但即時通訊每一個答案感激)

的努力

在此先感謝

+0

如果這是一個獨立的awk腳本將最後一個args /文件傳遞給awk您正在搜索的東西。設置一個變量爲argv [N],然後從argc中刪除它 – 2014-10-28 12:24:56

回答

1

這不是直接回答你的問題,但可能是你的問題。 我假設你生成了一些數據,然後你需要處理它。 當你需要保存某些數據邏輯時,可能需要通過shell使用sqlite,而不是生成平面文件,然後使用awk等工具進行解析和處理。

如果您擔心gerating數據的性能(常常執行INSERT而不是簡單的echo到文件),您可以將SQL命令回顯爲文件,然後在處理它們之前在單個事務中加載一堆數據。

UPDATE

如何:

read MYVAR && awk -v MYVAR="$MYVAR" '{print MYVAR $0}' in.log 

一個不太便攜版(GAWK擴展名):

awk 'BEGIN{ "head -1" | getline MYVAR; print MYVAR }{print MYVAR $0}' in.log 
+0

我基本上只想通過手動輸入在第一列中獲得一個數字,剩下的只是通過日誌解析 – howdoesthiswork 2014-10-28 11:08:39

+0

因此,您想要從日誌文件中讀取數據並來自交互式用戶的stdin輸入,對嗎? – 2014-10-28 11:12:17

+0

是的,我想在開始閱讀之前得到一個輸入,輸入應該設置=一個變量,然後列出解析的結果 – howdoesthiswork 2014-10-28 11:14:15

1

我認爲你有正確的想法時,你說:

編寫shell腳本誰做這一點,並執行awk腳本

有一百萬的方式做到這一點,但我會寫調用你的awk腳本bash腳本。

處理那裏的用戶交互和文件系統操作。

您也可以使用這裏的文檔從bash程序中生成awk文件。我今天晚些時候會告訴你。

Linux的一大優勢就是「小程序牽手」。 Windows最大的弱點是一個巨無霸程序的概念,它可以完成所有任務。

+1

是的,已經寫了一個shell腳本誰這樣做,它運作得很好 – howdoesthiswork 2014-10-28 11:45:47

+0

爲了完整起見,請在您的原始問題中發佈您的解決方案,然後將其標記爲已回答。這會幫助你的程序員在他們後面尋找相同的答案。 – shrewmouse 2014-10-28 13:13:04