[bash] Aliases file alfabetisch sorteren

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

  • dtech
  • Registratie: Juni 2005
  • Laatst online: 13-06 23:19
Hoi,

ik heb een aliases file die er als volgt uit ziet:

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
# aliases for a
a: |iets
a-a: |iets
a-b: |iets

# aliases for b
b: |iets
b-a: |iets
b-b: |iets

....

# aliases for random
random: |iets
random-a: |iets
random-b: |iets


Het begin is alfabetisch gesorteerd, maar er is naderhand veel onderaan toegevoegd. Ik wil hem graag weer alfabetisch sorteren, maar het gaat mijn scripting-talenten te boven.

Met sort kan je natuurlijk alfabetisch sorteren, maar ik wil de blokken graag behouden. Ik denk dus dat het handigste is om elk blok in een list/map/array op te slaan en als key de naam de gebruiken, die table te sorteren en dan weer weg te schrijven.

Weet iemand hoe dit kan? Het liefst in bash maar python mag ook. Als het niet lukt (of bijv. te moeilijk is voor bash) ga ik het in php doen, maar die wil ik uitfaseren voor scripts op onze server :)

Alvast bedankt!

[ Voor 3% gewijzigd door dtech op 05-12-2010 17:18 . Reden: voorbeeld iets verduidelijkt ]


Acties:
  • 0 Henk 'm!

  • CodeCaster
  • Registratie: Juni 2003
  • Niet online

CodeCaster

Can I get uhm...

Als de blokken standaard zijn gescheiden door twee newlines, dan kun je daar natuurlijk je initiële situatie op baseren, en dan sorteren totdat je het volgende blok (weer twee newlines) tegenkomt. Vervolgens schrijf je de blokken, gesorteerd op hun eerste entry, weer weg.

[ Voor 4% gewijzigd door CodeCaster op 05-12-2010 17:00 ]

https://oneerlijkewoz.nl
Op papier is hij aan het tekenen, maar in de praktijk...


Acties:
  • 0 Henk 'm!

  • RayNbow
  • Registratie: Maart 2003
  • Laatst online: 19:59

RayNbow

Kirika <3

Wat wil je trouwens dat er gebeurt met de comments? :p

Ipsa Scientia Potestas Est
NNID: ShinNoNoir


Acties:
  • 0 Henk 'm!

  • dtech
  • Registratie: Juni 2005
  • Laatst online: 13-06 23:19
Hmm goed idee misschien zoiets dan:

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
declare -a blokjes
declare -a namen

awk -F "\n\n" < aliases

numBloks = $?

for i in 1 .. numBloks
do
    blokjes[$i] = "$1"
    namen[$i] = getNaam "$1"
    shift 1
done

# Maak een gesorteerd referentie-array aan
sorted = $(echo $namen | sed 's/ /\n/g' | sort)

# Backup aliases file
cp aliases aliases.bak
# Leeg aliases file
echo > aliases

# Schrijf terug in alfabetische volgorde
for i in 1..numBloks
do
    pos = findPos sorted[$i] namen
    echo "${namen[$pos]}\n" >> aliases
done


Enkel getNaam en findPos nog even schrijven dan natuurlijk.

Of kan het efficienter/beter? (en is er een betere manier voor findPos dan gewoon een for loop?)

[ Voor 0% gewijzigd door dtech op 05-12-2010 17:17 . Reden: i ipv $i soms ]


Acties:
  • 0 Henk 'm!

  • dtech
  • Registratie: Juni 2005
  • Laatst online: 13-06 23:19
RayNbow schreef op zondag 05 december 2010 @ 17:10:
Wat wil je trouwens dat er gebeurt met de comments? :p
Die moeten blijven, het stond niet heel duidelijk in mijn openingspost, maar elk blokje heeft precies één comment bovenaan. Ik zal m'n startpost even aanpassen.

[ Voor 27% gewijzigd door dtech op 05-12-2010 17:17 ]


Acties:
  • 0 Henk 'm!

  • icyx
  • Registratie: Januari 2007
  • Niet online

icyx

chown -R us ./base

Als het zomaar een paar van die blokjes zijn kan je ook gewoon even die aliases file openen met emacs, een block selection doen op het blok wat je wilt sorteren, en daarna M-x sort-lines. Ben je ook gelijk gesorteerd :)

When you think you’ve succeeded / but something’s missing / means you have been defeated / by greed, your weakness.


Acties:
  • 0 Henk 'm!

  • NMe
  • Registratie: Februari 2004
  • Laatst online: 09-09 13:58

NMe

Quia Ego Sic Dico.

'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.


Acties:
  • 0 Henk 'm!

  • CAPSLOCK2000
  • Registratie: Februari 2003
  • Laatst online: 11-09 21:28

CAPSLOCK2000

zie teletekst pagina 888

icyx schreef op zondag 05 december 2010 @ 23:20:
Als het zomaar een paar van die blokjes zijn kan je ook gewoon even die aliases file openen met emacs, een block selection doen op het blok wat je wilt sorteren, en daarna M-x sort-lines. Ben je ook gelijk gesorteerd :)
Hij wil niet binnen blokjes selecteren maar de blokjes zelf onderling sorteren.

This post is warranted for the full amount you paid me for it.

Pagina: 1