2016-12-15 16 views
0

sed/awk/perl複数段落の書式設定

dzinfoはこのように書式設定された出力を与えます。

User: x0000001 
Forced into restricted environment: No 

    Role Name  Avail Restricted Env 
    --------------- ----- -------------- 
    login/Corp_All Yes None   
    _Example-Role-- Yes _Example-Role-- 
    ALL_Servers-Win  ALL_Servers-Win 
    /US_All    /US_All 
    Domain_GLOBAL-Ro Yes Domain_GLOBAL-Ro 
    le-CORE_Group-AL  le-CORE_Group-AL 
    L-MacOS/Domain_  L-MacOS/Domain_ 
    GLOBAL     GLOBAL  

    Effective rights: 
    Password login 
    Non password login 
    Allow normal shell 


PAM Application Avail Source Roles   
--------------- ----- -------------------- 
*    Yes login/US_All   
Privileged commands: 
    Name    Avail Command    Source Roles   
    --------------- ----- -------------------- -------------------- 
    CORP_GLOBAL-Com Yes /usr/bin/getfacl  CORP_GLOBAL-Role-COR 
    mand-CORE_SVR_I        E_SVR_INFRA_ALL-LNX/ 
    NFRA_ALL-V042-S        CORP_GLOBAL   
    00042/CORP_GLOB             
    AL                 
    CORP_GLOBAL-Com Yes /usr/bin/dzdo -l  CORP_GLOBAL-Role-COR 
    mand-CORE_SVR_I        E_SVR_INFRA_ALL-LNX/ 
    NFRA_ALL-V042-S        CORP_GLOBAL   
    00048/CORP_GLOB             
    AL                 
    CORP_GLOBAL-Com Yes /bin/cp temp_auth  CORP_GLOBAL-Role-COR 
    mand-CORE_SVR_I  /home/sudocfg/author E_SVR_INFRA_ALL-LNX/ 
    NFRA_ALL-V042-S  ized_keys    CORP_GLOBAL   
    00085/CORP_GLOB             
    AL                 

どのようなツールがこのようなレポートをフォーマットするのに最適でしょうか?そして、どのようにして、列/行を次のようなものにマッチさせたり、組み合わせたり、フォーマットしたりすることができますか?

User: x0000001 
Forced into restricted environment: No 

    Role Name            Avail Restricted Env 
    ---------------          ----- -------------- 
    login/Corp_All          Yes  None   
    _Example-Role--ALL_Servers-Win/US_All     Yes  _Example-Role--ALL_Servers-Win/US_All 
    Domain_GLOBAL-Role-CORE_Group-ALL-MacOS/Domain_GLOBAL Yes  Domain_GLOBAL-Role-CORE_Group-ALL-MacOS/Domain_GLOBAL 

    Effective rights: 
    Password login 
    Non password login 
    Allow normal shell 

    PAM Application Avail Source Roles   
    --------------- ----- -------------------- 
    *    Yes login/US_All   

Privileged commands: 
    Name                Avail Command            Source Roles   
    ---------------             ----- --------------------        -------------------- 
    CORP_GLOBAL-Command-CORE_SVR_INFRA_ALL-V042-S00042/CORP_GLOBAL Yes  /usr/bin/getfacl         CORP_GLOBAL-Role-CORE_SVR_INFRA_ALL-LNX/CORP_GLOBAL 
    CORP_GLOBAL-Command-CORE_SVR_INFRA_ALL-V042-S00048/CORP_GLOBAL Yes  /usr/bin/dzdo -l         CORP_GLOBAL-Role-CORE_SVR_INFRA_ALL-LNX/CORP_GLOBAL 
    CORP_GLOBAL-Command-CORE_SVR_INFRA_ALL-V042-S00085/CORP_GLOBAL Yes  /bin/cp temp_auth /home/sudocfg/authorized_keys  CORP_GLOBAL-Role-CORE_SVR_INFRA_ALL-LNX/CORP_GLOBAL 

各列のテキストは大きく異なりますので、私は幅が自動的に調整したいのですが。

私はワンライナーを扱うことができますが、このようなレポートですか?私はどこから始めるべきかわかりません。

$ cat tst.awk 
BEGIN { origFS=FS } 
/---/ { 
    origFS=FS 
    split($0,f,/\s+|-+/,s) 
    FIELDWIDTHS="" 
    for (i=1; i in s; i++) { 
     FIELDWIDTHS = (i>1 ? FIELDWIDTHS " " : "") length(s[i]) 
    } 
} 
/^\s*$/ { 
    FIELDWIDTHS="" 
    FS=origFS 
} 
{ 
    for (i=1; i<=NF; i++) { 
     printf "<%s>", $i, (i<NF?OFS:ORS) 
    } 
    print "" 
} 

+1

より大きな問題に適用するために自分自身を開発し、強化することができる小さな例を参考にして助けを求めることができます。たくさんの人が、探したいパターンを見つけようとしているテキストと、それをどうするべきかを理解しようとしているすべてのテキストを読みたいと思う人はほとんどいません。 –

+1

誰かがそれを解決しようとする努力を示さないこの質問に答えることを考慮しても、読めるほど大きすぎます。 :( – sjsam

+0

サイトにようこそ!質問の中で読者が探しているものについては、[how to ask](https://stackoverflow.com/help/how-to-ask)を参照してください。個人的には、あなたが 'Avail'と' Yes'で始まる行のブロックからカラムをアンラップしたいのではないかと思います。次の 'Yes'に行き、空行またはファイルの終わり(awkの' END {} ')が見えるときに最後のブロックを表示してください。 – cxw

答えて

0

は、あなたが開始するには、ここにあなたがFIELDWIDTHSのためのGNU AWKを使用して、各ライン上の個々のフィールドを分離するために開始したいどのように基本的です。

$ awk -f tst.awk file 
<User:><x0000001> 
<Forced><into><restricted><environment:><No> 

<Role><Name><Avail><Restricted><Env> 
<---------------><-----><--------------> 
< ><login/Corp_All >< ><Yes >< ><None   >< > 
< ><_Example-Role-->< ><Yes >< ><_Example-Role-><-> 
< ><ALL_Servers-Win>< ><  >< ><ALL_Servers-Wi><n> 
< ></US_All  >< ><  >< ></US_All ><> 
< ><Domain_GLOBAL-R><o ><Yes >< ><Domain_GLOBAL-><R> 
< ><le-CORE_Group-A><L ><  >< ><le-CORE_Group-><A> 
< ><L-MacOS/Domain_>< ><  >< ><L-MacOS/Domain><_> 
< ><GLOBAL   >< ><  >< ><GLOBAL  ><> 

<Effective><rights:> 
<Password><login> 
<Non><password><login> 
<Allow><normal><shell> 


<PAM><Application><Avail><Source><Roles> 
<---------------><-----><--------------------> 
<*    >< ><Yes >< ><login/US_All  >< > 
<Privileged comm><an><ds:><><><> 
< Name   >< >< Ava><i><l Command   >< > 
< -------------><-->< ---><-><- ------------------><-> 
< ><CORP_GLOBAL-Com>< ><Yes >< ></usr/bin/getfacl >< ><CORP_GLOBAL-Role-COR>< > 
< ><mand-CORE_SVR_I>< ><  >< ><     >< ><E_SVR_INFRA_ALL-LNX/>< > 
< ><NFRA_ALL-V042-S>< ><  >< ><     >< ><CORP_GLOBAL   >< > 
< ><00042/CORP_GLOB>< ><  >< ><     >< ><     >< > 
< ><AL    >< ><  >< ><     >< ><     >< > 
< ><CORP_GLOBAL-Com>< ><Yes >< ></usr/bin/dzdo -l >< ><CORP_GLOBAL-Role-COR>< > 
< ><mand-CORE_SVR_I>< ><  >< ><     >< ><E_SVR_INFRA_ALL-LNX/>< > 
< ><NFRA_ALL-V042-S>< ><  >< ><     >< ><CORP_GLOBAL   >< > 
< ><00048/CORP_GLOB>< ><  >< ><     >< ><     >< > 
< ><AL    >< ><  >< ><     >< ><     >< > 
< ><CORP_GLOBAL-Com>< ><Yes >< ></bin/cp temp_auth >< ><CORP_GLOBAL-Role-COR>< > 
< ><mand-CORE_SVR_I>< ><  >< ></home/sudocfg/author>< ><E_SVR_INFRA_ALL-LNX/>< > 
< ><NFRA_ALL-V042-S>< ><  >< ><ized_keys   >< ><CORP_GLOBAL   >< > 
< ><00085/CORP_GLOB>< ><  >< ><     >< ><     >< > 
< ><AL    >< ><  >< ><    ><><><> 

あなたは、アーノルド・ロビンス著有効なawkプログラミング、第4版を購入し、あなたはそれが動作し、それの上に構築する方法を確認するために、そのいじり始めると参照用のそれは便利にしたいとしています。

+1

awkの使用に関するexplainationの質問はなぜ落札ですか?完璧にこの種の必要性のスイート – NeronLeVelu

関連する問題