Contribution donnée:
hello: world foo bar baz
bar:
baz: bin boop bop fiz bang beep
bap: bim bam bop
boatkeeper: poughkeepsie
Je voudrais le trier dans la plupart des mots en haut, au moins à la fin, comme ceci:
baz: bin boop bop fiz bang beep
hello: world foo bar baz
bap: bim bam bop
boatkeeper: poughkeepsie
bar:
Comment pourrais-je faire cela avec sort
un autre outil?
text-processing
sort
Caleb Xu
la source
la source
bin: bop boop
avantboatkeeper: poughkeepsie
. Si deux lignes partagent le même nombre de mots, je préférerais que les liens soient alphabétisés, mais ce n'est pas une exigence.Réponses:
Vous pourriez faire quelque chose comme:
Nous utilisons
awk
pour préfixer le nombre de champs à chaque ligne. Nous avons ensuitesort
par ce numéro et le retirer aveccut
.la source
Dans GNU récent,
awk
on peut utiliser unPROCINFO
tableau pour définir de nombreux paramètres internes, y compris l'ordre dans lequel les éléments du tableau sont imprimés (contrôlés par élément"sorted_in"
). Ainsi, nous pouvons construire et tableau indexé avec la valeur deNF" "NR
, quels éléments ont une valeur de$0
et l'imprimer dans la sortie souhaitée, dans votre cas, ce serait"@ind_num_desc"
:la source
NF" "$0" "NR
, vous n'auriez qu'unNR
mécanisme de secours / de gestion des doublons.cmp_func()
- gnu awk le permet.Perl one-liner:
Si vous souhaitez rompre les liens en utilisant l'ordre alphabétique:
la source
Par python.
ou
la source