2013-12-11 112 views
0

好的,這是問題所在。我正在嘗試獲取已安裝的應用程序和版本的數組。將應用程序日誌文本文件解析爲數組。

到目前爲止,我所發現的是,我可以運行此命令:

system_profiler SPApplicationsDataType > log.txt 

哪位能給我以下格式的TXT文件:

Applications: 

MacTubes: 

    Version: 3.1.5 
    Obtained from: Unknown 
    Last Modified: 9/15/12, 2:41 AM 
    Kind: Universal 
    64-Bit (Intel): No 
    Location: /Volumes/Storage/MacTubes.app 

Boom: 

    Version: 1.6 
    Obtained from: Identified Developer 
    Last Modified: 10/12/12, 3:24 AM 
    Kind: Intel 
    64-Bit (Intel): No 
    Signed by: Developer ID Application: Global Delight Technologies Pvt. Ltd, Developer ID Certification Authority, Apple Root CA 
    Location: /Volumes/Storage/Boom.app 
    Get Info String: 1.6 Copyright © 2008 - 2012, Global Delight Technologies Pvt. Ltd. 

World of Goo: 

    Version: 1.30 
    Obtained from: Unknown 
    Last Modified: 2/8/10, 8:43 AM 
    Kind: Universal 
    64-Bit (Intel): No 
    Location: /Volumes/Storage/Misc/World of Goo.app 
    Get Info String: 1.30, Copyright © 2008 2D Boy LLC 

VZAccess Manager: 

    Version: 4.3.0 
    Obtained from: Unknown 
    Last Modified: 12/17/09, 8:48 PM 
    Kind: Universal 
    64-Bit (Intel): No 
    Location: /Volumes/Storage/Misc/VZAccess Manager.app 
    Get Info String: VZAccess Manager 4.3.0 Copyright © 2000-2008 Smith Micro Software, Inc. 

ColorSync: 

    Obtained from: Unknown 
    Last Modified: 10/9/00, 12:00 PM 
    Kind: Classic 
    Location: /Volumes/Storage/Misc/System Folder/Control Panels/ColorSync 

AppleTalk: 

    Obtained from: Unknown 
    Last Modified: 10/1/96, 12:00 PM 
    Kind: Classic 
    Location: /Volumes/Storage/Misc/System Folder/Control Panels/AppleTalk 

我希望能夠到採取應用程序名稱和版本號,並將它們以某種方式存儲在一個數組中。由於所有參賽作品對我來說都是一樣的,我不知道該從哪裏開始?我需要忽略沒有版本號的條目。

+0

你使用什麼編程語言? – bdesham

+0

如果可以,我想使用C++,但不管哪種語言最簡單。我想我可以讓問題變得更簡單,我找到了一個他們正在做類似事情的舊帖子,但它並沒有給我帶來他們得到的結果。 http://hintsforums.macworld.com/archive/index.php/t-109990.html如果我能把它變成名稱:版本的格式,它會使分析變得更簡單。然而,他們所做的並不是爲我工作,我需要獲取所有應用程序,而不僅僅是某些應用程序。 – Macuserman17

回答

0

這裏是一個awk腳本會給你你提到的輸出格式:

/^ {4}.+:$/ { 
    sub(/^ {4}/, "", $0) 
    last_application = $0 
} 

/^ +Version:/ { 
    sub(/^ +Version: /, "", $0) 
    print last_application " " $0 
} 

如果你將它保存爲script.awk可以運行

awk -f script.awk log.txt 

得到像

MacTubes: 3.1.5 
Boom: 1.6 
World of Goo: 1.30 
VZAccess Manager: 4.3.0 
輸出

這已經使用OS X 10.9.0的/usr/bin/awk進行了測試。

+0

在上面的例子中,輸出到哪裏去了?運行保存的腳本不會更改log.txt,創建新文件或在終端中顯示輸出。 – Macuserman17

+0

我的確發現終端中的以下命令會產生正確的格式,但確實存在一些錯誤,顯然它存在一些無法處理的異常。 system_profiler SPApplicationsDataType | grep -B8 -E'()[^ /] * \。app'| awk'/:$/{printf $ 0};/Version:/ {print「」,$ 2,$ 3}' – Macuserman17

+0

@ Macuserman17輸出應該直接發送到終端。 (請注意,該腳本不會爲沒有版本號的應用程序打印任何內容。) – bdesham