2013-01-04 3 views
1

J'ai besoin de manipuler un fichier texte, je l'ai créé en utilisant des scripts wmic.AWK/SEDManipuler le fichier texte, Créer un fichier CSV en utilisant un fichier d'alimentation

fichier d'origine:

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 

sortie souhaitée:

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 

Le fichier d'origine est séparé, et je ne ai besoin certaines parties de celui-ci. Chaque fois que je demandais des informations, j'ai obtenu une description de ce que j'interrogais et le résultat la ligne en dessous.

Mais maintenant je dois organiser les données de cette façon:

Première: Noeud, Fabricant, Modèle: Je dois tout ce que

Deuxième: Noeud, Fabricant, Modèle: Je ne ai besoin Fabricant, modèle (j'exclut nœud des lignes restantes)

Troisième: Noeud, AddressWidth: Je ne ai besoin AddressWidth (une seule fois sera suffisant)

Fourt h: Noeud, SerialNumber: Je ne ai besoin SerialNumber

Cinquième: Noeud, Nom, Version: Je ne ai besoin Nom, version, mais seulement pour la ligne qui contient CBMR

Je ne sais pas si cela est possible.

+0

Il est difficile de comprendre votre question . Qu'est-ce que les choses à propos de Premier: Deuxième: ... etc signifie? Est-ce que c'est la logique que vous essayez d'utiliser? Vous avez étiqueté une sortie à 2 lignes comme votre sortie requise, il est donc difficile de comprendre la relation entre les 2, car il semble que vous vouliez un bloc d'informations multiligne, (comme une étiquette d'adresse), mais votre exemple est en-tête) sur une seule ligne. Pensez à modifier votre question et à utiliser l'outil d'édition {} en haut pour améliorer la description de votre sortie et de votre logique. Bonne chance. – shellter

+0

Avez-vous vraiment besoin de toutes ces lignes d'entrée d'échantillons? Si possible, réduisez les lignes qui ont été utilisées pour créer la ligne de sortie. – shellter

+0

@shellter J'ai peur que ce soit le fichier source que j'ai et je ne serai pas en mesure de le changer bientôt. J'ai essayé de séparer les choses dont j'ai besoin en disant premier/deuxième ... jusqu'à la fin. – Eduardo

Répondre

0

Voici une façon d'utiliser awk. Courir comme:

awk -f script.awk file 

Contenu de script.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 
} 

Résultats:

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 

Sinon, voici le one-liner:

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

Désolé Steve J'utilise Gawk pour Windows, j'ai lancé les deux façons, un paquebot et le script mais en produisant des informations vides. pas sûr pourquoi, je suis déjà échapper le "par" mais ne fonctionne toujours pas, je vais essayer quelques choses – Eduardo

+1

Désolé, pour une raison quelconque, chaque fois que j'ai copié le code un caractère a été remplacé, utilisé un autre navigateur, et ça marche bien. Et ce code fonctionne comme j'ai besoin, merci! – Eduardo

+0

@Eduardo: Pas de problème! Heureux que vous l'avez eu :-) – Steve

Questions connexes