2013-01-04 91 views
1

我需要处理一个文本文件,我使用wmic脚本创建了它。AWK/SED处理文本文件,使用Feed文件创建一个CSV文件

原始文件:

Node,Manufacturer,Model 
NAKAMA,Dell Computer Corporation,PowerEdge 6650    
Node,Name,Version 
NAKAMA,Microsoft Windows Server 2003 R2 Enterprise Edition|C:\WINDOWS|\Device\Harddisk0\Partition1,5.2.3790 


Node,AddressWidth 
NAKAMA,32 
NAKAMA,32 
NAKAMA,32 
NAKAMA,32 


Node,SerialNumber 
NAKAMA,BZJS571 


Node,Name,Version 
NAKAMA,Microsoft Office Excel Viewer,12.0.6219.1000 
NAKAMA,Microsoft Software Update for Web Folders (English) 14,14.0.4763.1000 
NAKAMA,Microsoft Office Visio MUI (English) 2010,14.0.4763.1000 
NAKAMA,Microsoft Office Shared Setup Metadata MUI (English) 2010,14.0.4763.1000 
NAKAMA,Microsoft Office Visio 2010,14.0.4763.1000 
NAKAMA,Microsoft Office Proofing (English) 2010,14.0.4763.1000 
NAKAMA,Microsoft Office Shared MUI (English) 2010,14.0.4763.1000 
NAKAMA,Microsoft Office Proof (English) 2010,14.0.4763.1000 
NAKAMA,Microsoft Office Proof (Spanish) 2010,14.0.4763.1000 
NAKAMA,Microsoft Office Proof (French) 2010,14.0.4763.1000 
NAKAMA,MSXML 6 Service Pack 2 (KB954459),6.20.1099.0 
NAKAMA,Microsoft SQL Server 2005 Express Edition (DTC),9.2.3042.00 
NAKAMA,Microsoft .NET Framework 3.0 Service Pack 2,3.2.30729 
NAKAMA,Microsoft Group Policy Management Console with SP1,1.0.2.0 
NAKAMA,Microsoft Windows SDK for Windows 7 (7.1),7.1.30514 
NAKAMA,Microsoft SQL Server Native Client,9.00.3042.00 
NAKAMA,Broadcom Management Programs,10.38.04 
NAKAMA,Microsoft .NET Framework 3.5 SP1,3.5.30729 
NAKAMA,Symantec Endpoint Protection,11.0.7101.1056 
NAKAMA,Windows Resource Kit Tools - ClusterRecovery.exe,1.0.0.1 
NAKAMA,Java(TM) 6 Update 11,6.0.110 
NAKAMA,Windows Resource Kit Tools,5.2.3790 
NAKAMA,ILMT-TAD4D Agent,7.2.2.1 
NAKAMA,Microsoft Active Directory Topology Diagrammer,2.2.4146 
NAKAMA,IBM Tivoli Storage Manager Client,05.04.0100 
NAKAMA,TivReDist,1.00.0000 
NAKAMA,Adobe Reader X (10.1.0),10.1.0 
NAKAMA,ActivePerl 5.10.0 Build 1004,5.10.1004 
NAKAMA,Active Directory Migration Tool,2.0.0.0 
NAKAMA,Microsoft Easy Assist v2,8.1.6416.0 
NAKAMA,Microsoft SQL Server 2005 Express Edition (SQLEXPRESS),9.2.3042.00 
NAKAMA,Dell OpenManage Server Administrator,5.5.0 
NAKAMA,Windows Resource Kit Tools - GPInventory.exe,1.0.1361.27800 
NAKAMA,Microsoft SQL Server VSS Writer,9.00.3042.00 
NAKAMA,VMware Remote Console Plug-in,2.5.0.199067 
NAKAMA,Microsoft SQL Server 2005 Tools Express Edition,9.2.3042.00 
NAKAMA,Microsoft Visual C++ 2005 Redistributable,8.0.56336 
NAKAMA,Microsoft Visual J# 2.0 Redistributable Package - SE,2.0.50728 
NAKAMA,VMware vSphere Client 5.1,5.1.0.1557 
NAKAMA,Windows Server 2003 Service Pack 2 Administration Tools Pack,5.2.3790.3959 
NAKAMA,Microsoft Visual C++ 2008 Redistributable - x86 9.0.30729.4148,9.0.30729.4148 
NAKAMA,Microsoft Visual C++ 2010 x86 Redistributable - 10.0.30319,10.0.30319 
NAKAMA,Microsoft .NET Framework 2.0 Service Pack 2,2.2.30729 
NAKAMA,Windows Support Tools,5.2.3790.3959 
NAKAMA,Quest ActiveRoles Management Shell for Active Directory,1.5.1.2421 
NAKAMA,MSXML 4.0 SP2 (KB954430),4.20.9870.0 
NAKAMA,Debugging Tools for Windows (x86),6.12.2.633 
NAKAMA,Microsoft SQL Server Setup Support Files (English),9.00.3042.00 
NAKAMA,CBMR 5.0.1 Release 4,5.0.1 

所需的输出:

Node,Manufacturer,Model,Name,Version,AddressWidth,SerialNumber,Name,Version 
NAKAMA,Dell Computer Corporation,PowerEdge 6650,Microsoft Windows Server 2003 R2 Enterprise Edition|C:\WINDOWS|\Device\Harddisk0\Partition1,5.2.3790,32,BZJS571,CBMR 5.0.1 Release 4,5.0.1 

原始文件被分离,而我只需要它的某些部分。 每次查询信息时,我都会得到我查询的内容和结果。

但现在我需要用这种方式来组织数据:

第一: 节点,制造商,型号:我需要所有的

二: 节点,制造商,型号:我只需要制造商,模型(我将剩余的行排除节点)

三: 节点,AddressWidth:我只需要AddressWidth(仅一次就足够了)

Fourt H: 节点的SerialNumber:我只需要的SerialNumber

第五: 节点,名称,版本:我只需要名称,版本,但仅适用于包含CBMR

我不知道这是可能的线。

+0

很难理解你的问题。第一个:第二个:...等的意思是什么?它是否意味着你正试图使用​​的逻辑?您已经将2行输出标记为所需的输出,因此很难理解2之间的关系,因为它看起来像您想要多行信息块(如地址标签),但您的示例输出是(在头)全部在一行上。考虑编辑您的问题,并使用顶部附近的编辑工具来改进所需输出和逻辑的描述。祝你好运。 – shellter

+0

您是否真的需要所有这些样本输入行,如果可能的话,请减少到仅用于创建输出行的行。 – shellter

+0

@shellter恐怕这是我的源文件,我不能马上改变它。 当我说第一/第二..直到结束时,我试图分开我需要的东西。 – Eduardo

回答

0

以下是使用awk的一种方法。的script.awk

awk -f script.awk file 

内容:

BEGIN { 
    FS=OFS="," 
} 

$1 == x=("Node") { 
    c++ 

    f=sub(/[^,]*,/,"") 
    one = (one ? one : x) OFS $0 
    next 
} 

c==5 && $2 !~ /CBMR/ { 
    next 
} 

f==1 { 
    y=$1 

    gsub(/^[^,]*,|[ \t]*$/,"") 
    two = (two ? two : y) OFS $0 
    f=0 
} 

END { 
    print one ORS two 
} 

结果:像运行

Node,Manufacturer,Model,Name,Version,AddressWidth,SerialNumber,Name,Version 
NAKAMA,Dell Computer Corporation,PowerEdge 6650,Microsoft Windows Server 2003 R2 Enterprise Edition|C:\WINDOWS|\Device\Harddisk0\Partition1,5.2.3790,32,BZJS571,CBMR 5.0.1 Release 4,5.0.1 

另外,这里是一个班轮:

awk 'BEGIN { FS=OFS="," } $1 == x=("Node") { c++; f=sub(/[^,]*,/,""); one = (one ? one : x) OFS $0; next } c==5 && $2 !~ /CBMR/ { next } f==1 { y=$1; gsub(/^[^,]*,|[ \t]*$/,""); two = (two ? two : y) OFS $0; f=0 } END { print one ORS two }' file 
+0

对不起史蒂夫我使用Gawk的Windows,我推出了两种方式,一个班轮和脚本,但它产生空的信息。 不知道为什么,我已经逃避了“by”,但仍然没有工作,我会尝试一些东西 – Eduardo

+1

对不起,由于某种原因,我每次复制代码一个字符被替换,使用另一个浏览器,它的工作精细。 而这段代码正常工作,谢谢! – Eduardo

+0

@Eduardo:没问题!很高兴你得到它的工作:-) – Steve