セミコロンで始まる行で区切られたテキストの分割

セミコロンで始まる行で区切られたテキストの分割

コマンドの出力があります(plantuml -language;参照BBEditコードレス言語モジュールのキーワード、事前定義された名前、記号のリストはありますか?背景)実際には次のようになります。

;type1
;3
@fff
@ggg
hhh

;preprocessor
;1
!undef

;keyword
;3
!undef
test
somemore

.
.
.

1 番目は;名前を表し、2 番目は;次の行のエントリ数を表します。これらの項目の後には、次のブロックが始まる空白行が続きます。

出力全体をさらに処理する別のファイル(名前付き)に分割したいと思います。

文書type1:

@fff
@ggg
hhh

文書preprocessor:

!undef

文書keyword:

!undef
test
somemore

のようなツールを使用してawkこれをどのように実行できますかsed?それとも簡単なツールがありますか?

ベストアンサー1

おそらく最もエレガントな解決策ではないかもしれませんが、これはうまくいくようです:

awk -F';' '
  NF==0 { next }
  NF>1 && $1=="" { filename=$2; getline; next }
  { print > filename }
' file
  • フィールド数が0(空行)の場合は、次の行に進みます。
  • フィールド数が1(セミコロンで始まる行)を超える場合は、変数を設定して次の行を取得しますが、処理せずにfilename(スキップして)次の行に進みます。
  • それ以外の場合は、その行を印刷して出力をファイルにリダイレクトしますfilename

おすすめ記事