[bash]Drie aparte bestanden regels aan elkaar

Pagina: 1
Acties:

  • Justin_Time
  • Registratie: Juni 2001
  • Laatst online: 17-07-2025
Dag mensen,

Ik heb een probleem waar ik maar niet uit kan komen.
Ik heb drie bestanden waar een aantal regels in staan als:

username::eenmd5hashvaneenwachtwoord

dus bijvoorbeeld

piet::664ed86678345522df3da3fe9a19f17c2
klaas::664ed86678345522df3da3fe9a19f17c2

etc... Deze haal ik uit een drie verschillende databases en heb ik dus in drie verschillende bestanden staan.

Nu wil ik graag via bash/awk/sed.. bijvoorbeeld 1 bestand maken waarin dan alle gebruikers usernamen achter elkaar staan om zo te kunnen controleren of er een wachtwoord op een systeem is verandert.

Dus iets als
code:
1
2
piet::664ed86678345522::piet::664ed86678345522::piet::664ed86678345522
klaas::664ed86678345522::klaas::664ed86678345522::klaas::664ed86678345522

(heb de md5 has wat ingekort)

Ik heb al een boel manieren geprobeer (drie bestanden cat + exotische awk, greppen) etc.. ik kom alleen steeds met het probleem dat ik de regels onderelkaar krijg.

Wat is nu de "beste" manier om zoiets aan te pakken?

Elke dag dronken is ook een geregeld leven.


Verwijderd

Ga met Perl aan de slag.

Handige site: http://www.comp.leeds.ac.uk/Perl/start.html

  • Justin_Time
  • Registratie: Juni 2001
  • Laatst online: 17-07-2025
Als het anders kan dan met perl heb ik liever dat. Ik heb al de funties die ik tot nu toe gemaakt heb ook gewoon gedaan met standaard bash en awk en sed. Voor dit kleine probleem zou ik toch niet echt perl hoeven te gebruiken?

Elke dag dronken is ook een geregeld leven.


  • A_L
  • Registratie: Juni 2001
  • Niet online

A_L

Kun je niet iets doen van
cat bestand1 bestand2 bestand3|sort

en dan, uh en dan..... nog wat sed-magic >:) om regeleinden enzo te verwijderen.
(helaas zit ik niet achter m'n linux pc... :-/ )

  • Spider.007
  • Registratie: December 2000
  • Niet online

Spider.007

* Tetragrammaton

kun je de drie verschillende bestanden niet inlezen in drie verschillende arrays die je vervolgens item voor item met elkaar vergelijkt? Dan kun je telkens output geven in de vorm van 'de hash op systeem 1 is anders dan die van systeem 2 en 3' ofzo. Als je die stap echt zo graag handmatig wil doen kun je telkens een combinatie van die drie regels wegschrijven :)

En waarom maak je trouwens geen gebruik van de standaard `diff` functionaliteit?
A_L schreef op 27 juli 2004 @ 19:44:
Kun je niet iets doen van
cat bestand1 bestand2 bestand3|sort

en dan, uh en dan..... nog wat sed-magic >:) om regeleinden enzo te verwijderen.
(helaas zit ik niet achter m'n linux pc... :-/ )
Dan krijg je natuurlijk drie bestanden achter elkaar geplakt.

[ Voor 40% gewijzigd door Spider.007 op 27-07-2004 19:49 ]

---
Prozium - The great nepenthe. Opiate of our masses. Glue of our great society. Salve and salvation, it has delivered us from pathos, from sorrow, the deepest chasms of melancholy and hate


  • Wilke
  • Registratie: December 2000
  • Laatst online: 23:18
Probeer eens 'paste -d: file1 file2 file3'.

Kijk verder eens in de manpages van cut, paste en sort. Daarmee moet het in principe kunnen.

[ Voor 48% gewijzigd door Wilke op 27-07-2004 19:52 ]


  • Justin_Time
  • Registratie: Juni 2001
  • Laatst online: 17-07-2025
Spider.007 schreef op 27 juli 2004 @ 19:44:
kun je de drie verschillende bestanden niet inlezen in drie verschillende arrays die je vervolgens item voor item met elkaar vergelijkt? Dan kun je telkens output geven in de vorm van 'de hash op systeem 1 is anders dan die van systeem 2 en 3' ofzo. Als je die stap echt zo graag handmatig wil doen kun je telkens een combinatie van die drie regels wegschrijven :)

En waarom maak je trouwens geen gebruik van de standaard `diff` functionaliteit?


[...]


Dan krijg je natuurlijk drie bestanden achter elkaar geplakt.
Ja maar als er dan bijvoorbeeld in systeem 2 een username zit die niet in usysteem 1 zit klopt de hele array niet meer... want hoe weet je zeker of bijvoorbeeld het eerste element uit array 1 hetzelfde is als het eerste element uit array 2?

Elke dag dronken is ook een geregeld leven.


  • Wilke
  • Registratie: December 2000
  • Laatst online: 23:18
Zelf een beetje nadenken mag ook, maar een aanzet dan:

code:
1
2
3
4
5
6
7
8
# Maak een lijst van alle usernames (ook die niet op alle systemen voorkomen)
cat bestand1 bestand2 bestand3 | cut -d: -f1 | sort -u | while read username; do
  # Veronderstelt dat een user niet dubbel voorkomt per bestand
  user1=`grep -e "^$username" bestand1` # username moet aan begin v/d regel staan, dat doet de ^ ervoor
  user2=`grep -e "^$username" bestand2`
  user3=`grep -e "^$username" bestand3`
  echo "${user1}:{$user2}:{$user3}
done


Als je geluk hebt en ik niet al te veel domme tikfouten heb gemaakt, geeft dat zo'n beetje wel het lijstje weer :)

  • A_L
  • Registratie: Juni 2001
  • Niet online

A_L

Spider.007 schreef op 27 juli 2004 @ 19:44:Dan krijg je natuurlijk drie bestanden achter elkaar geplakt.
Dat is toch het idee? dat het in 1 bestand komt, maar dan nog per gebruiker een regel met user::md5-paren.
Pagina: 1