2013-01-04 92 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