Toon posts:

String splitten

Pagina: 1
Acties:

Verwijderd

Topicstarter
in string $ip staat 192.168.1.1 test

string1 moet 192.168.1.1 bevatten en
string2 moet test bevatten


echo $ip | awk '{print $1}' > $string1
echo $ip | awk '{print $2}' > $string2


Het lukt niet echt was doet ik fout.

  • under-world
  • Registratie: December 2000
  • Laatst online: 17-01-2025

under-world

ooh-la dots

[overbodigmode]
Ik dacht dat het over een bikinistring ging, waar je zelf een split in wilde maken... :+
[/overbodigmode]

Verwijderd

awk vervangen door cut -d' ' -f1, dus:
code:
1
echo $ip | cut -d' ' -f1 > string/filename

dit houdt in dat cut de string opdeelt in kolommen, gescheiden door de field delimiter (-d), welke in dit geval een spatie is. met de optie -f geef je aan welke kolom cut eruit moet vissen...

Verwijderd

Topicstarter
Op dinsdag 16 juli 2002 13:25 schreef under-world het volgende:
[overbodigmode]
Ik dacht dat het over een bikinistring ging, waar je zelf een split in wilde maken... :+
[/overbodigmode]
zucht, wie is er nog wel serieus :)

Verwijderd

echo $IP | cut -f 1 -d ' '
echo $IP | cut -f 2 -d ' '
te laat :)

  • phreggle
  • Registratie: Juni 2002
  • Niet online
Als je > gebruikt stuur je de output naar een file met als filename de inhoud van de variabele (welke waarschijnlijk dus nog leeg was).

Je kan de output van awk toewijzen aan variabelen door gebruik te maken van backquotes ( ` ).
code:
1
2
3
4
5
6
7
8
phreggle@lappie phreggle $ ip="192.168.1.1 test"
phreggle@lappie phreggle $ string1=`echo $ip | awk '{print $1}'`
phreggle@lappie phreggle $ string2=`echo $ip | awk '{print $2}'`
phreggle@lappie phreggle $ echo $string1
192.168.1.1
phreggle@lappie phreggle $ echo $string2
test
phreggle@lappie phreggle $

Zo werkt het dus. :)

Edit: hmmm laat :) cut kan ook idd maar awk werkt ook prima hoor. Hoe je split doet er ook niet toe; waar het om gaat is dat je niet variabele assigned door > te gebruiken.

Verwijderd

Topicstarter
Op dinsdag 16 juli 2002 13:28 schreef areana het volgende:
awk vervangen door cut -d' ' -f1, dus:
code:
1
echo $ip | cut -d' ' -f1 > string/filename

dit houdt in dat cut de string opdeelt in kolommen, gescheiden door de field delimiter (-d), welke in dit geval een spatie is. met de optie -f geef je aan welke kolom cut eruit moet vissen...
kan de delimeter ook een tab zijn ? een tab = chr(8) geloof ik

  • phreggle
  • Registratie: Juni 2002
  • Niet online
Op dinsdag 16 juli 2002 13:32 schreef marc.de.vries het volgende:

[..]

kan de delimeter ook een tab zijn ? een tab = chr(8) geloof ik
Wanneer je aan cut geef delimiter meegeeft pakt ie tab als standaard waarde. Zie ook 'cut --help'. :)

Verwijderd

Topicstarter
Op dinsdag 16 juli 2002 13:30 schreef phreggle het volgende:
Als je > gebruikt stuur je de output naar een file met als filename de inhoud van de variabele (welke waarschijnlijk dus nog leeg was).

Je kan de output van awk toewijzen aan variabelen door gebruik te maken van backquotes ( ` ).
code:
1
2
3
4
5
6
7
8
phreggle@lappie phreggle $ ip="192.168.1.1 test"
phreggle@lappie phreggle $ string1=`echo $ip | awk '{print $1}'`
phreggle@lappie phreggle $ string2=`echo $ip | awk '{print $2}'`
phreggle@lappie phreggle $ echo $string1
192.168.1.1
phreggle@lappie phreggle $ echo $string2
test
phreggle@lappie phreggle $

Zo werkt het dus. :)

Edit: hmmm laat :) cut kan ook idd maar awk werkt ook prima hoor. Hoe je split doet er ook niet toe; waar het om gaat is dat je niet variabele assigned door > te gebruiken.
Dit werkt !! ERG BEDANKT ALLEMAAL voor de snelle reaktie :)

  • phreggle
  • Registratie: Juni 2002
  • Niet online
Oke, mooi dat het is opgelost. :) Ik heb alleen nog een toevoeging.

Wanneer je een string hebt met \t als tab character dan kan je niet zomaar echo gebruiken; je moet dan een extra parameter (-e) meegeven die er voor zorgt dat echo escaped-characters interpreteert.

Je krijgt dan zo iets:
code:
1
2
3
4
5
6
7
8
9
10
11
# string met \t:
phreggle@lappie phreggle $ ip="192.168.1.1\ttest"
# \t wordt afgebeeld als tab character:
phreggle@lappie phreggle $ echo -e $ip
192.168.1.1     test
# velden uitlezen gaat nu ook goed:
phreggle@lappie phreggle $ echo -e $ip | cut -f1
192.168.1.1
phreggle@lappie phreggle $ echo -e $ip | cut -f2
test
phreggle@lappie phreggle $

Verwijderd

ff voor de volledigheid: tab=chr(9) en niet 8!

Verwijderd

Waarom gebruiken jullie allemaal cut of awk? Je kunt string-splitten met bash zelf:
code:
1
2
3
4
5
#!/bin/bash
# split.sh

echo "Woord voor spatie:  ${1% *}"
echo "Woord na spatie:    ${1#* }"

./split.sh "1.2.3.4 blah"

Output:
code:
1
2
Woord voor spatie:  1.2.3.4
Woord na spatie:    blah

HTH
Pagina: 1