ファイル内の特定の行を並べ替える

ファイル内の特定の行を並べ替える

1. まとめ

すべてのファイルではなく、ファイル内の特定の場所で行をソートする方法を理解していません。

これをどんな自由な方法でも解決できればいいと思います。


2. 設定

1. ファイル構造

大容量(19MB)ファイルがあり、SashaMillionaire.md次の問題があります。試合。繰り返しブロックで構成されます。各ブロックには10本のラインがあります。ファイル構造(PCRE正規表現を使用)

Millionaire
\d{18}
QUESTION.*
.*
.*
.*
.*
.*
.*
.*
Millionaire
\d{18}
QUESTION.*
.*
.*
.*
.*
.*
.*
.*

SashaMillionaire.md10行ブロック以外には他の行とテキストはありません。空行はなく、10行以上のブロックがあります。

2. ファイル内容の例

Millionaire
123456788763237476
QUESTION|2402394827049882049
Who is the greatest Goddess in the world?
Sasha
Kristina
Sasha
Katya
Valeria
AuthorOfQuestion
Millionaire
459385734954395394
QUESTION|9845495845948594999
Where Sasha live?
Novgorod
St. Petersburg
Kazan
Novgorod
Chistopol
Another author
Millionaire
903034225025025568
QUESTION|ABC121980850540445C
Another question.
Katya
Sasha
Kazan
Chistopol
Katya
Unknown author

3. 予想される動作

6~9行をアルファベット順に並べてから、16~19行、26~29行などを並べ替える必要があります。

    しかし、他の行はソートされません。

はい

結果は次のようになります。

Millionaire
123456788763237476
QUESTION|2402394827049882049
Who is the greatest Goddess of the world?
Sasha
Katya
Kristina
Sasha
Valeria
AuthorOfQuestion
Millionaire
459385734954395394
QUESTION|9845495845948594999
Where Sasha live?
Novgorod
Chistopol
Kazan
Novgorod
St. Petersburg
Another author
Millionaire
903034225025025568
QUESTION|ABC121980850540445C
Another question.
Katya
Chistopol
Katya
Sasha
Kazan
Unknown author

4. 役に立たない

  1. Google検索
  2. 同様のタスクを解決できるsortUnixコマンドが見つかりましたが、これらのコマンドを使用してタスクを解決する方法が見つかりませんでした。sedawk

ベストアンサー1

各セクションがtextで始まると仮定すると、次のように/-対話型またはスクリプトを使用してこれをMillionaire実行できます。vimex

$ ex SashaMillionaire.md << 'EOF'
:g/^Millionaire$/+5,+8 sort
:1,$p
:q
EOF

Millionaire
123456788763237476
QUESTION|2402394827049882049
Who is the greatest Goddess in the world?
Саша
Валерия
Катя
Кристина
Саша
AuthorOfQuestion
Millionaire
459385734954395394
QUESTION|9845495845948594999
Where Sasha live?
Novgorod
Chistopol
Kazan
Novgorod
St. Petersburg
Another author
Millionaire
903034225025025568
QUESTION|ABC121980850540445C
Another question.
Katya
Chistopol
Katya
Kazan
Sasha
Unknown author

ファイルを適切に変更するには、printステートメントを1,$p次のように置き換えます。w

ex SashaMillionaire.md << 'EOF'
:g/^Millionaire$/+5,+8 sort
:wq
EOF

またはheredocの代わりに1行を好むなら、

printf ':g/^Millionaire$/+5,+8 sort\nwq\n' | ex SashaMillionaire.md

おすすめ記事