1
votes

Trier les lignes et supprimer toutes les lignes sauf une en fonction de la dernière chaîne?

cherchant une solution à mon problème, j'ai trouvé ce fil de discussion: Tri sur le dernier champ d'une ligne

J'ai utilisé des solutions de tri en utilisant sed et awk et elles fonctionnent, une autre chose dont j'ai besoin est de supprimer toutes les lignes sauf une en fonction de la dernière chaîne d'une ligne.

Exemple, j'ai:

www.site.com/324242_1234
www.site.com/6545_2345
www.site.com/87745_456

Besoin de ce résultat:

www.site.com/324242_1234
www.site.com/233_1234
www.site.com/45357_1234
www.site.com/6545_2345
www.site.com/5433_2345
www.site.com/87745_456
www.site.com/453209_456
www.site.com/1345_456

Je n'ai donc besoin de garder qu'une seule ligne qui contient cette dernière chaîne, dans cet exemple, elles sont séparées par un soulignement. J'apprécie votre aide.


1 commentaires

Vous obtiendrez un accueil beaucoup plus amical et une bien meilleure aide ici si vous montrez quel code vous avez essayé jusqu'à présent et décrivez les problèmes que vous rencontrez avec lui. Sans code, votre question ressemble à une demande de consultation gratuite et, sur StackOverflow, beaucoup de gens n'aiment pas ça.


3 Réponses :


2
votes
$ awk -F_ '!a[$NF]++' file

www.site.com/324242_1234
www.site.com/6545_2345
www.site.com/87745_456

1 commentaires

veuillez expliquer le script cryptique awk



1
votes

Que diriez-vous de cela?

cat file | sed -e 's/_/\t/gi' | sort -uk 2,2 | sed -e 's/\t/_/gi'

fichier contient les chaînes


0 commentaires

1
votes
awk -F[_/] '{print $NF,$(NF-1),$0}' input_file |sort -r -nk2,1   |awk '!a[$1]++{gsub($1FS$2,"");gsub(/^ /,"");print}'
www.site.com/87745_456
www.site.com/6545_2345
www.site.com/45357_1234

0 commentaires