/ Forside / Teknologi / Operativsystemer / Linux / Nyhedsindlæg
Login
Glemt dit kodeord?
Brugernavn

Kodeord


Reklame
Top 10 brugere
Linux
#NavnPoint
o.v.n. 11177
peque 7911
dk 4814
e.c 2359
Uranus 1334
emesen 1334
stone47 1307
linuxrules 1214
Octon 1100
10  BjarneD 875
Sammenligne to filer og kun greppe ud fra ~
Fra : JoeDoe


Dato : 09-12-09 01:56

Hvis jeg har én fil kun med nogle få IP adresser (usorteret - én
adresse per linie) og en anden fil med alle IP adresser samt nogle
flere informationer, hvordan kan jeg så joine disse to filer således,
at jeg får det fulde output fra den store fil men kun på de IP
adresser som er i den simple fil?

Øh, giver det mening?

file1:
10.0.0.11
10.0.0.1
10.0.0.12

file2:
10.0.0.1 Info Text
10.0.0.2 Also Some Text
10.0.0.3 More of the same
10.0....
10.0.0.10 Yes
10.0.0.11 No
10.0.0.12 Blaaa
osv....

Hvordan (på en sikker måde således at 10.0.0.1 ikke greppes sammen med
10.0.0.11) fanger jeg kun de rigtige IP adresser?

 
 
Martin Larsen (09-12-2009)
Kommentar
Fra : Martin Larsen


Dato : 09-12-09 10:51

JoeDoe wrote:

> Øh, giver det mening?

Det tror jeg nok. Du vil have alle de linjer fra fil2 hvis IP findes i fil1?

grep -w -f file1 file2

> Hvordan (på en sikker måde således at 10.0.0.1 ikke greppes sammen med
> 10.0.0.11) fanger jeg kun de rigtige IP adresser?

-w sørger for at der kun matches på hele udtrykket, dvs. i dette
tilfælde kun på hele linjer i file1

Martin

JoeDoe (09-12-2009)
Kommentar
Fra : JoeDoe


Dato : 09-12-09 03:15

> > Øh, giver det mening?
>
> Det tror jeg nok. Du vil have alle de linjer fra fil2 hvis IP findes i fil1?
>
> grep -w -f file1 file2
>
> > Hvordan (på en sikker måde således at 10.0.0.1 ikke greppes sammen med
> > 10.0.0.11) fanger jeg kun de rigtige IP adresser?
>
> -w sørger for at der kun matches på hele udtrykket, dvs. i dette
> tilfælde kun på hele linjer i file1

Nope, det fungere ikke helt for mig. Se f.eks. på nedenstående
resultat:

usr@linux> more file1
10.0.0.11
10.0.0.1
10.0.0.12

usr@linux> more file2
10.0.0.1 Info Text
10.0.0.2 Also Some Text
10.0.0.3 More of the same
10.0.0.4 Test
10.0.0.10 Yes
10.0.0.11 No
10.0.0.12 Blaaa

usr@linux> grep -w -f file1 file2
10.0.0.12 Blaaa

Johan Holst Nielsen (09-12-2009)
Kommentar
Fra : Johan Holst Nielsen


Dato : 09-12-09 11:25

JoeDoe wrote:
>>> Øh, giver det mening?
>> Det tror jeg nok. Du vil have alle de linjer fra fil2 hvis IP findes i fil1?
>>
>> grep -w -f file1 file2
>>
>>> Hvordan (på en sikker måde således at 10.0.0.1 ikke greppes sammen med
>>> 10.0.0.11) fanger jeg kun de rigtige IP adresser?
>> -w sørger for at der kun matches på hele udtrykket, dvs. i dette
>> tilfælde kun på hele linjer i file1
>
> Nope, det fungere ikke helt for mig. Se f.eks. på nedenstående
> resultat:
>
> usr@linux> more file1
> 10.0.0.11
> 10.0.0.1
> 10.0.0.12
>
> usr@linux> more file2
> 10.0.0.1 Info Text
> 10.0.0.2 Also Some Text
> 10.0.0.3 More of the same
> 10.0.0.4 Test
> 10.0.0.10 Yes
> 10.0.0.11 No
> 10.0.0.12 Blaaa
>
> usr@linux> grep -w -f file1 file2
> 10.0.0.12 Blaaa

Hmmm - lyder underligt - ovenstående virker fint hos mig...

johan@johan-lenovo/tests$ more file1
10.0.0.11
10.0.0.1
10.0.0.12

johan@johan-lenovo/tests$ more file2
10.0.0.1 Info Text
10.0.0.2 Also Some Text
10.0.0.3 More of the same
10.0.0.4 Test
10.0.0.10 Yes
10.0.0.11 No
10.0.0.12 Blaaa

johan@johan-lenovo/tests$ grep -w -f file1 file2
10.0.0.1 Info Text
10.0.0.11 No
10.0.0.12 Blaaa


Sikker på der ikke er en fejl i en af filerne - er det direkte kopiere -
ovenstående?

/Johan

Martin Larsen (09-12-2009)
Kommentar
Fra : Martin Larsen


Dato : 09-12-09 11:40

JoeDoe wrote:

> Nope, det fungere ikke helt for mig. Se f.eks. på nedenstående
> resultat:

Mit output er:

10.0.0.1 Info Text
10.0.0.11 No
10.0.0.12 Blaaa

Som Johan skriver, så check lige om der er fejl i filerne.

Alternativt kan du have en anden version af grep. Prøv et manualopslag
på grep (man grep) og se om den har parametrene -w og -f.

Martin

Martin Larsen (09-12-2009)
Kommentar
Fra : Martin Larsen


Dato : 09-12-09 11:42

Martin Larsen wrote:

> Alternativt kan du have en anden version af grep. Prøv et manualopslag
> på grep (man grep) og se om den har parametrene -w og -f.

Eller det kunne være noget med linjeafslutningen (windows/unix type)...

Martin

Johan Holst Nielsen (09-12-2009)
Kommentar
Fra : Johan Holst Nielsen


Dato : 09-12-09 11:52

Martin Larsen wrote:
> Martin Larsen wrote:
>
>> Alternativt kan du have en anden version af grep. Prøv et manualopslag
>> på grep (man grep) og se om den har parametrene -w og -f.
>
> Eller det kunne være noget med linjeafslutningen (windows/unix type)...

Så burde den slet ikke outputte noget :(

johan@johan-lenovo/tests$ grep -w -f file1 file2
10.0.0.1   Info Text
10.0.0.11   No
10.0.0.12   Blaaa
johan@johan-lenovo/tests$ unix2dos file1
johan@johan-lenovo/tests$ grep -w -f file1 file2
johan@johan-lenovo/tests$


/Johan

Kent Friis (09-12-2009)
Kommentar
Fra : Kent Friis


Dato : 09-12-09 12:15

Den Wed, 09 Dec 2009 11:52:25 +0100 skrev Johan Holst Nielsen:
> Martin Larsen wrote:
>> Martin Larsen wrote:
>>
>>> Alternativt kan du have en anden version af grep. Prøv et manualopslag
>>> på grep (man grep) og se om den har parametrene -w og -f.
>>
>> Eller det kunne være noget med linjeafslutningen (windows/unix type)...
>
> Så burde den slet ikke outputte noget :(
>
> johan@johan-lenovo/tests$ grep -w -f file1 file2
> 10.0.0.1   Info Text
> 10.0.0.11   No
> 10.0.0.12   Blaaa
> johan@johan-lenovo/tests$ unix2dos file1
> johan@johan-lenovo/tests$ grep -w -f file1 file2
> johan@johan-lenovo/tests$

Det kunne jo være en blanding.

Mvh
Kent
--
"The Brothers are History"

Johan Holst Nielsen (09-12-2009)
Kommentar
Fra : Johan Holst Nielsen


Dato : 09-12-09 12:25

Kent Friis wrote:
> Den Wed, 09 Dec 2009 11:52:25 +0100 skrev Johan Holst Nielsen:
>> Martin Larsen wrote:
>>> Martin Larsen wrote:
>>>
>>>> Alternativt kan du have en anden version af grep. Prøv et manualopslag
>>>> på grep (man grep) og se om den har parametrene -w og -f.
>>> Eller det kunne være noget med linjeafslutningen (windows/unix type)...
>> Så burde den slet ikke outputte noget :(
>>
>> johan@johan-lenovo/tests$ grep -w -f file1 file2
>> 10.0.0.1   Info Text
>> 10.0.0.11   No
>> 10.0.0.12   Blaaa
>> johan@johan-lenovo/tests$ unix2dos file1
>> johan@johan-lenovo/tests$ grep -w -f file1 file2
>> johan@johan-lenovo/tests$
>
> Det kunne jo være en blanding.

Korrekt - men så burde en dos2unix (hvis man har det installeret) kunne
gøre tricket, der "renser" filen.

/Johan

N/A (09-12-2009)
Kommentar
Fra : N/A


Dato : 09-12-09 15:48



N/A (09-12-2009)
Kommentar
Fra : N/A


Dato : 09-12-09 15:48



N/A (09-12-2009)
Kommentar
Fra : N/A


Dato : 09-12-09 11:45



N/A (09-12-2009)
Kommentar
Fra : N/A


Dato : 09-12-09 15:48



N/A (09-12-2009)
Kommentar
Fra : N/A


Dato : 09-12-09 11:25



JoeDoe (09-12-2009)
Kommentar
Fra : JoeDoe


Dato : 09-12-09 03:41

> > Nope, det fungere ikke helt for mig. Se f.eks. på nedenstående
> > resultat:
>
> > usr@linux> more file1
> > 10.0.0.11
> > 10.0.0.1
> > 10.0.0.12
>
> > usr@linux> more file2
> > 10.0.0.1        Info Text
> > 10.0.0.2        Also Some Text
> > 10.0.0.3        More of the same
> > 10.0.0.4        Test
> > 10.0.0.10       Yes
> > 10.0.0.11       No
> > 10.0.0.12       Blaaa
>
> > usr@linux> grep -w -f file1 file2
> > 10.0.0.12       Blaaa
>
> Hmmm - lyder underligt - ovenstående virker fint hos mig...
>
> johan@johan-lenovo/tests$ more file1
> 10.0.0.11
> 10.0.0.1
> 10.0.0.12
>
> johan@johan-lenovo/tests$ more file2
> 10.0.0.1        Info Text
> 10.0.0.2        Also Some Text
> 10.0.0.3        More of the same
> 10.0.0.4        Test
> 10.0.0.10       Yes
> 10.0.0.11       No
> 10.0.0.12       Blaaa
>
> johan@johan-lenovo/tests$ grep -w -f file1 file2
> 10.0.0.1        Info Text
> 10.0.0.11       No
> 10.0.0.12       Blaaa
>
> Sikker på der ikke er en fejl i en af filerne - er det direkte kopiere -
> ovenstående?

Det er copy/pastet direkte fra output, ja. Bemærk at file2 er
tabulator separeret.

Jeg køre på SuSE SLES 10 - kan det have indflydelse?

Martin Larsen (09-12-2009)
Kommentar
Fra : Martin Larsen


Dato : 09-12-09 11:45

JoeDoe wrote:

> Det er copy/pastet direkte fra output, ja. Bemærk at file2 er
> tabulator separeret.

Jeg har lige prøvet med tabulatorsep. og det virker stadig, så det er
ikke det.

Martin

Martin Larsen (09-12-2009)
Kommentar
Fra : Martin Larsen


Dato : 09-12-09 12:04

JoeDoe wrote:

> Jeg køre på SuSE SLES 10 - kan det have indflydelse?

Jeg har OpenSUSE 11 i VMWare, jeg kan godt lidt senere prøve om det
virker der.

Martin

JoeDoe (09-12-2009)
Kommentar
Fra : JoeDoe


Dato : 09-12-09 04:33

> Korrekt - men så burde en dos2unix (hvis man har det installeret) kunne
> gøre tricket, der "renser" filen.

Filerne er produceret lokalt på SuSE serveren, så det er ikke dét -
jeg prøvede dog lige alligevel, at konvertere dem via dos2unix, men
med præcist samme resultat. Jeg synes jeg tidligere har oplevet
lignende "mærkelige" resultater men har dog altid fundet en anden
løsning, men måske er det ligefrem SuSE 10 som er buggy - omend jeg
har min store tvivl?

Det lyder da i hvert fald mærkeligt, at det giver forskellige
resultater hos os!?

Martin Larsen (09-12-2009)
Kommentar
Fra : Martin Larsen


Dato : 09-12-09 15:48

JoeDoe wrote:

> Det lyder da i hvert fald mærkeligt, at det giver forskellige
> resultater hos os!?

Jeg har nu prøvet på OpenSUSE 11 og her fungerer det også korrekt. Dog
med den vigtigt forskel, at der ikke må være nogen tomme linjer i file1.

Så tjek lige at du ikke har en tom linje til sidst i filen.

Hvis det stadig ikke fungerer, er der måske en fejl i din grep. Du kan
evt. prøve at opgradere den, men jeg har ingen ide om hvordan man gør
det i SUSE.

Martin

N/A (10-12-2009)
Kommentar
Fra : N/A


Dato : 10-12-09 14:18



JoeDoe (09-12-2009)
Kommentar
Fra : JoeDoe


Dato : 09-12-09 07:59

> Jeg har nu pr vet p OpenSUSE 11 og her fungerer det ogs korrekt. Dog
> med den vigtigt forskel, at der ikke m v re nogen tomme linjer i file1.
>
> S tjek lige at du ikke har en tom linje til sidst i filen.
>
> Hvis det stadig ikke fungerer, er der m ske en fejl i din grep. Du kan
> evt. pr ve at opgradere den, men jeg har ingen ide om hvordan man g r
> det i SUSE.
>
> Martin

Nu ved jeg ikke helt hvor godt det vil lykkes med nedenstående output
men det er en hexdump af begge filer:

usr@linux> hexdump -C file1
00000000 31 30 2e 30 2e 30 2e 31 31 20 0a 31 30 2e 30 2e |
10.0.0.11 .10.0.|
00000010 30 2e 31 20 0a 31 30 2e 30 2e 30 2e 31 32 |0.1 .
10.0.0.12|
0000001e

usr@linux> hexdump -C file2
00000000 31 30 2e 30 2e 30 2e 31 09 49 6e 66 6f 20 54 65 |
10.0.0.1.Info Te|
00000010 78 74 20 0a 31 30 2e 30 2e 30 2e 32 09 41 6c 73 |xt .
10.0.0.2.Als|
00000020 6f 20 53 6f 6d 65 20 54 65 78 74 20 0a 31 30 2e |o Some
Text .10.|
00000030 30 2e 30 2e 33 09 4d 6f 72 65 20 6f 66 20 74 68 |
0.0.3.More of th|
00000040 65 20 73 61 6d 65 20 0a 31 30 2e 30 2e 30 2e 34 |e same .
10.0.0.4|
00000050 09 48 65 73 74 0a 31 30 2e 30 2e 30 2e 31 30 09 |.Hest.
10.0.0.10.|
00000060 59 65 73 20 0a 31 30 2e 30 2e 30 2e 31 31 09 4e |Yes .
10.0.0.11.N|
00000070 6f 20 0a 31 30 2e 30 2e 30 2e 31 32 09 42 6c 61 |o .
10.0.0.12.Bla|
00000080 61 61 |aa|

Output er dog stadigt:

usr@linux> grep -w -f file1 file2
10.0.0.12 Blaaa

Dog havde jeg rent faktisk en tom linie til sidst i både file1 og
file2 - men resultatet er så det samme uanset hvad.

Hmmm, jeg vil se om jeg kan få opgraderet serveren til en SLES 11
(omend den jeg har nu er en SLES10 SP2).

Niels Baggesen (09-12-2009)
Kommentar
Fra : Niels Baggesen


Dato : 09-12-09 16:22

JoeDoe <joedoe10@gmail.com> wrote:
> Nu ved jeg ikke helt hvor godt det vil lykkes med nedenstående output
> men det er en hexdump af begge filer:

> usr@linux> hexdump -C file1
> 00000000 31 30 2e 30 2e 30 2e 31 31 20 0a 31 30 2e 30 2e |
> 10.0.0.11 .10.0.|
> 00000010 30 2e 31 20 0a 31 30 2e 30 2e 30 2e 31 32 |0.1 .
> 10.0.0.12|
> 0000001e

To ting falder i øjnene ... der er en blank efter IP adressen, og der er
ikke noget linjeskift som afslutning på den sidste linje

/Niels

--
Niels Baggesen -- @home -- Århus -- Denmark -- niels@baggesen.net
The purpose of computing is insight, not numbers -- R W Hamming

Martin Larsen (09-12-2009)
Kommentar
Fra : Martin Larsen


Dato : 09-12-09 20:18

Niels Baggesen wrote:

> To ting falder i øjnene ... der er en blank efter IP adressen, og der er
> ikke noget linjeskift som afslutning på den sidste linje

Ja, der må ikke være blanke efter IP-adressen i file1

Martin

N/A (10-12-2009)
Kommentar
Fra : N/A


Dato : 10-12-09 14:18



JoeDoe (10-12-2009)
Kommentar
Fra : JoeDoe


Dato : 10-12-09 03:00

> > To ting falder i øjnene ... der er en blank efter IP adressen, og der er
> > ikke noget linjeskift som afslutning på den sidste linje
>
> Ja, der må ikke være blanke efter IP-adressen i file1

Agh, ja - denne opdagede jeg også, da jeg kom hjem og ville teste på
min Red Hat. Dér så jeg, at der af én eller anden grund havde sneget
sig et mellemrum med ind til sidst i file1 og da det blev fjernet
fungerede det naturligvis ligesom normalt. Så jeg var en klovn,
beklager

Martin Larsen (10-12-2009)
Kommentar
Fra : Martin Larsen


Dato : 10-12-09 14:18

JoeDoe wrote:

> Så jeg var en klovn,
> beklager

Nåh, der går nu nok. Jeg er kun glad for at kunne hjælpe for en gangs
skyld da jeg selv er ny i Linux og derfor hele tiden spørger om alt muligt!

Hilsen
Martin

Søg
Reklame
Statistik
Spørgsmål : 177579
Tips : 31968
Nyheder : 719565
Indlæg : 6409073
Brugere : 218888

Månedens bedste
Årets bedste
Sidste års bedste