垂直に収集されたデータをテーブルに変換

垂直に収集されたデータをテーブルに変換

データを収集し、次の形式で「data.txt」ファイルに保存しました。

<$ MG_nr>
</200>company-type:Engine1
</210>company-name:STR
</220>address:XX
</230>nr:4568789
</240>zipcode:08765
</250>place:ljkmljubi
</260>phone:786754678
</270>fax:76756778
</$>
<$ MG_nr>
</280>company-type:Engine2
</290>company-name:STR
</300>address:XX
</310>nr:7675678
</320>zipcode:87867
</330>place:jkhgkl
</340>phone:87865
</350>fax:876578
</$>
<$ MG_nr>
</360>company-type:Engine3
</370>company-name:STR
</380>address:XX
</390>nr:78675467
</400>zipcode:87657
</410>place:uiytryui
</420>phone:87656788976
</430>fax:8976535467
</$>
<$ MG_nr>
</440>company-type:Engine4
</450>company-name:STR
</460>address:XX
</470>nr:876578y67
</480>zipcode:786578
</490>place:kljhgryui
</500>phone:8976546789
</510>fax:989765
</$>

次のスプレッドシートに変更したいと思います。

Type         Name   Address   Nr      Zipcode Place     Phone       Fax
------------------------------------------------------------------------
Engine1      STR     XX      4568789  08765   ljkmljubi 786754678   76756778
Engine2      STR     XX      7675678  87867   jkhgkl    87865       876578
Engine3      STR     XX      78675467 87657   uiytryui  87656788976  8976535467
Engine4      STR     XX      87657867 786578  kljhgryui 8976546789 989765

私は次のコードを見つけてU & L site複製してみました。

#!/bin/bash
cut -d'>' -f 2 data.txt | awk -F: '
/^company-type:/{type[c]=$2}
/^company-name:/{name[c]=$2}
/^address:/{address[c]=$2}
/^nr:/{nr[c]=$2}
/^zipcode:/{zipcode[c]=$2}
/^place:/{place[c]=$2}
/^phone:/{phone[c]=$2}
/^Fax:/{fax[c]=$2;c++}
END {
 print "Type         Name   Address   Nr Zipcode Place Phone Fax"
 print "------------------------------------------------------------------------"
 for(x in type) {
  printf "%-10s %3d    %s      %s %s %s %s %s\n",
    substr(type[x],2),
    company-name[x],
    address[x],
    nr[x],
    zipcode[x],
    place[x]
    phone[x]
    fax[x]
 }
}' data.txt

しかし、これはうまくいきません。タイトルのみ印刷されます!

print "Type         Name   Address   Nr Zipcode Place Phone Fax"
 print "------------------------------------------------------------------------"

何が間違っているのかわかりませんか?

どんなアドバイスにも感謝します!または上記のコードを効率的かつ簡単にするための提案がありますか?

ベストアンサー1

より簡単な解決策は次のとおりです。

awk -F'[>:]' 'BEGIN{print "company-type company-name address nr zipcode place phone fax"}{print $3}' data.txt | xargs -n8 | column -t

company-type  company-name  address  nr        zipcode  place      phone        fax
Engine1       STR           XX       4568789   08765    ljkmljubi  786754678    76756778
Engine2       STR           XX       7675678   87867    jkhgkl     87865        876578
Engine3       STR           XX       78675467  87657    uiytryui   87656788976  8976535467
Engine4       STR           XX       87657867  786578   kljhgryui  8976546789   989765

フィールド区切り文字は、ベース列のデータを読み取り、ヘッダーの構成中に必要な実際のデータと同じ3番目の列を印刷できます-Fawk:>awk

この出力はこの出力にパイプされ、xargs8つの列に再構成されます。最後に、このコマンドはcolumn結果列の間にタブと同じ間隔を追加します。

おすすめ記事