Solarisのsort -zと同じ(複数行のソートをサポート)

Solarisのsort -zと同じ(複数行のソートをサポート)

私は複数行の「チャンク」サポートを得るために「sort -z」(GNUでのみサポートされている)に対応するSolarisを探しています。一部のテキストを時系列(日付、時刻)に並べ替え、並べ替えの過程でテキストブロックが破壊されないようにしたいと思います。

たとえば、次のようになります。

2020-05-15:02:00:00:000 INFO[LF]
2020-05-15:02:00:02:000 INFO[LF]
[HT]some extra data as second line[LF]
[HT]2020-05-15:02:00:01:000 INFO[LF]
[HT]some extra data as second line[LF]
[HT]some extra data as third line[LF]
2020-05-15:02:00:04:000 INFO[LF]
2020-05-15:02:00:03:000 INFO[LF]
  • [HT]は水平タブキーで、[LF]は\n

次のように分類したいと思います。

2020-05-15:02:00:00:000 INFO[LF]
2020-05-15:02:00:01:000 INFO[LF]
[HT]extra data as second line[LF]
[HT]some extra data as third line[LF]
2020-05-15:02:00:02:000 INFO[LF]
[HT]extra data as second line[LF]
2020-05-15:02:00:03:000 INFO[LF]
2020-05-15:02:00:04:000 INFO[LF]

Centos/ubuntu(GNU) では次のように処理しました。 sort -zt : -k2,2 -k3,3n -k4,4n -k5,5n -k6,6n (milisec が正しく整列しているかどうかはわかりません).

注:

  1. msortは使用できません。 awk/sed/perl 1行のソリューションを歓迎します。
  2. 複数の行があるかどうかに関係なく、各行はLFで終わります。
  3. 複数行(前の2行目を含む)は、HF「タブ」文字で始まります。

ありがとうございます:-)

ベストアンサー1

そしてperl

perl -0777 -ne 'print sort /^\d.*\n(?:\D.*\n)*/gm' your-file

ファイル全体をメモリにロードし(slurpモードを使用-0777 -p)、正規表現(^数字()で始まる行の後に\d0行以上の行)に基づいてチャンクを抽出してメモリに保存します。*\Dprintsort

おすすめ記事