2013-12-11 64 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