Toon posts:

Het verschill tussen twee bestanden

Pagina: 1
Acties:

Verwijderd

Topicstarter
Ik krijg dagelijks een lijst met artikelen die in het magazijn op voorraad zijn binnen. Nu wil ik door middel van een commando het verschil tussen het bestand van gister en vandaag bekijken.

Logischerwijs probeer je dan:
code:
1
diff file1.txt file2.txt


Echter heeft diff niet het resultaat dat ik zoek. Ik krijg dan namelijk de orginele regel met een '<' ervoor, en de nieuwe regel met een '>' ervoor. In de manpages van diff kan ik geen optie vinden om dit uit te zetten.

Wat ik terug wil hebben van een soort van diff commando is een lijst met alleen de gewijzigde regels uit het bestand. Is hiet stiekem toch een flag in diff voor, of moet ik een ander commando gebruiken?

Zoeken op got naar 'diff' en 'verschil' in combinatie met wat andere worden, alsmede lekker googlelen hebben mij niet tot het antwoord kunnen leiden, hopelijk heeft hier iemand een idee.

  • The Eagle
  • Registratie: Januari 2002
  • Laatst online: 11:16

The Eagle

I wear my sunglasses at night

doe maar eens een
code:
1
man grep

Dan kom je denk ik al verder, zeker als je een pipe (dat is zo'n | ) gebruikt :)

Al is het nieuws nog zo slecht, het wordt leuker als je het op zijn Brabants zegt :)


  • Gerco
  • Registratie: Mei 2000
  • Laatst online: 09-02 06:19

Gerco

Professional Newbie

Wat wil je precies voor output dan? Als je bijvoorbeeld alleen de gewijzigde regels uit het oude bestand wilt zien, kun je zoiets doen:
code:
1
diff file1 file2 | grep "^<" | cut -c 3-

[ Voor 30% gewijzigd door Gerco op 28-10-2005 11:25 ]

- "Als ik zou willen dat je het begreep, legde ik het wel beter uit!" | All number systems are base 10!


Verwijderd

Topicstarter
Gerco schreef op vrijdag 28 oktober 2005 @ 11:21:
Wat wil je precies voor output dan? Als je bijvoorbeeld alleen de gewijzigde regels uit het oude bestand wilt zien, kun je zoiets doen:
code:
1
diff file1 file2 | grep "^<" | cut -c 3-
Geprobeerd, nu krijg ik echter alle regels uit het orginele bestand als output?!
Misschien ergens iets omgedraaid dat ik nu alleen de niet gewijzigde regels te zien krijg ofzo?!

  • Gerco
  • Registratie: Mei 2000
  • Laatst online: 09-02 06:19

Gerco

Professional Newbie

In dat geval zijn alle regels blijkbaar gewijzigd :)

Die grep en cut voegen niets toe, die filteren alleen de uitvoer van diff, je diff levert dus teveel op, haal die grep en cut er maar eens af en kijk zelf.

Kijk maar:
code:
1
2
3
4
5
6
7
8
9
gerco@gentoo ~/tmp $ cat file1
file1
regel2<
gerco@gentoo ~/tmp $ cat file2
file2
regel2<
gerco@gentoo ~/tmp $ diff file1 file2 | grep "^<" | cut -c 3-
file1
gerco@gentoo ~/tmp $

[ Voor 48% gewijzigd door Gerco op 28-10-2005 12:05 ]

- "Als ik zou willen dat je het begreep, legde ik het wel beter uit!" | All number systems are base 10!


  • leuk_he
  • Registratie: Augustus 2000
  • Laatst online: 28-01 19:27

leuk_he

1. Controleer de kabel!

Dan zijn de regels toch iets anders. diff heeft opties om whitespace e.d. te ignore dus doe je best.

Need more data. We want your specs. Ik ben ook maar dom. anders: forum, ff reggen, ff topic maken
En als je een oplossing hebt gevonden laat het ook ujb ff in dit topic horen.


  • MadCow*
  • Registratie: Januari 2001
  • Laatst online: 05-08-2025

MadCow*

<= icon space for rent

Diff default naar context output format (-c optie), met idd die '<' en '>' tjes.
Wat je beter kunt gebuiken is unified output format (-u optie), dit formaat is gewoon veel duidelijker. Wat je hier na kunt doen met deze output door grep heen zoeken op '+'jes en '-'tjes.
code:
1
diff -u file1 file2 | grep -e + -e -

Voordeel hier van is dat je ook nog ziet welke regels er zijn weggehaald en welke er bij gekomen zijn.

Veni, Vidi, Et je n'en crois pas mes yeux! (ik kwam, ik zag, en ik geloofde mijn ogen niet!) - J. Caesar (Asterix en de gladiatoren) | Nu vernieuwd met toegevoegde lazyness.


  • vanaalten
  • Registratie: September 2002
  • Nu online
Is 'sdiff' geen oplossing? Die levert een file op waarbij de twee inputfiles naast elkaar geplaatst zijn, met de tekens '<', '>' en '|' om aan te geven of een regel is toegevoegd, verwijderd of gewijzigd. Met een grep kan je daar dan weer op filteren.

'sdiff' kan ook white-space negeren en alleen de wijzigingen laten zien.
Pagina: 1