Trier le fichier 'par paragraphe' dans Vim


2

Étant donné un fichier qui ressemble à:

Crab
  some text that doesn't need sorting.
  more textual descriptination
Albatross
  some text or other
  perhaps a list that needs no sorting:
    1. a
    2. bee
Dolphin
Pterodactyl
  long story about this particular animal.

Comment pourrais-je dire à Vim (version 7) de trier ce fichier par ordre alphabétique par nom d'animal? Impossible? Sinon, comment pourrait-on trier ce fichier?

Réponses:


6

Oui, vous pouvez le faire dans vim:

:%s/$/$/
:g/^\w/s/^/\r/
:1del t | $put t
:g/^\w/,/^$/-1join!
:sort
:%s/\$/\r/g
:g/^$/d

sortie

Albatross
  some text or other
  perhaps a list that needs no sorting:
    1. a
    2. bee
Crab
  some text that doesn't need sorting.
  more textual descriptination
Dolphin
Pterodactyl
  long story about this particular animal.

Vous devez utiliser un caractère spécial pour indiquer EOL (autre que $ )!


3

Sinon, comment pourrait-on trier ce fichier?

$perl sortparagraphs animals.txt

Albatross
  some text or other
  perhaps a list that needs no sorting:
    1. a
    2. bee
Crab
  some text that doesn't need sorting.
  more textual descriptination
Dolphin
Pterodactyl
  long story about this particular animal.

Où sont classés les alinéas

#!/usr/local/bin/perl
use strict;
use warnings;

my ($paragraph, @list);
while(<>) {
  if (/^\S/) {
    push @list, $paragraph if $paragraph;
    $paragraph = '';
  }
  $paragraph .= $_;
}
push @list, $paragraph if $paragraph;
print sort @list;

Il existe probablement une meilleure solution Perl mais la réponse ci-dessus est une réponse rapide.

Si le fichier est plus volumineux que la mémoire, il peut être judicieux de le transformer en une ligne par animal, de le trier et enfin de le transformer à nouveau.

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.