データを収集し、次の形式で「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番目の列を印刷できます-F
。awk
:
>
awk
この出力はこの出力にパイプされ、xargs
8つの列に再構成されます。最後に、このコマンドはcolumn
結果列の間にタブと同じ間隔を追加します。