Nieuws:

We zijn er weer.

Na lange tijd van afwezigheid zijn we er weer  :laugh:
We hebben alle wachtwoorden gereset, je oude wachtwoord werkt niet meer.Je moet via het "wachtwoord vergeten"-linkje je wachtwoord resetten. Je krijgt hiervoor een mailtje op het adres dat je bij ons geregistreerd hebt.

De komende tijd zijn we nog druk bezig om de rest van de site op te bouwen, dus het kan zijn dat sommige onderdelen (tijdelijk) niet werken.

Welkom, Gast. Alsjeblieft inloggen of registreren.
Heb je de activerings-mail niet ontvangen?

Auteur Topic: [OPGELOST] GREP / AWK Nummers uit string "vb R1234,1234"  (gelezen 1521 keer)

Offline marrrriej

  • Lid
  • Steunpunt: Nee
[OPGELOST] GREP / AWK Nummers uit string "vb R1234,1234"
« Gepost op: 2010/02/02, 10:16:56 »
Hoe kan ik uit de volgende string de nummers halen:

"R1234,1234"
De 2 nummers willen ik in 2 losse variabelen.

Ik heb al het een en ander geprobeerd met grep, awk en sed.

Alvast bedankt.
« Laatst bewerkt op: 2010/02/03, 15:52:14 door marrrriej »

Offline djurny

  • Lid
  • Steunpunt: Nee
Re: GREP / AWK Nummers uit string "vb R1234,1234"
« Reactie #1 Gepost op: 2010/02/02, 10:59:27 »
eval $(echo "R12340,12341" | awk -F"," '
/^R[0-9]+,[0-9]+$/ {
  sub(/[^0-9]/, "", $1)
  sub(/[^0-9]/, "", $2)
  print "A=" $1
  print "B=" $2
}')

echo "A='${A}'"
echo "B='${B}'"

iets simpeler:

# filter alleen het eerste patroon
A=$(echo "R1234,1234" | sed -n 's|^R\([0-9][0-9]*\),[0-9][0-9]*$|\1|p')
# filter alleen het tweede patroon
B=$(echo "R1234,1234" | sed -n 's|^R[0-9][0-9]*,\([0-9][0-9]*\)$|\1|p')
echo "Ka Me Ha Me Ha Me Ha!" | tr [A-Z] [a-z]

Offline marrrriej

  • Lid
  • Steunpunt: Nee
Re: GREP / AWK Nummers uit string "vb R1234,1234"
« Reactie #2 Gepost op: 2010/02/02, 11:07:47 »
Heel erg bedankt. Deze werkt volgens wens.

Echter weet u misschien ook hoe ik het handigste de "R1234,1234" uit een file kan halen?

Ik moet namelijk de eerste regel van een bestand hebben waar heel veel van deze strings onder elkaar staan.

R0014,0134
R0454,0032
R0234,0038
R0524,0038
R0254,0032
R0223,0045

Alvast bedankt

Offline djurny

  • Lid
  • Steunpunt: Nee
Re: GREP / AWK Nummers uit string "vb R1234,1234"
« Reactie #3 Gepost op: 2010/02/02, 11:19:31 »
ipv de 'echo' zou je een
head -n1 abc.txt | awk ...
moeten doen..

let wel: dit is zeer gehackte in elkaar gefloste scripting en niet voor serieuze consumptie geschikt :) met wat meer tijd is er een nette oplossing te bedenken, maar voor 'eventjes' wert dit ook
echo "Ka Me Ha Me Ha Me Ha!" | tr [A-Z] [a-z]

Offline marrrriej

  • Lid
  • Steunpunt: Nee
Re: GREP / AWK Nummers uit string "vb R1234,1234"
« Reactie #4 Gepost op: 2010/02/02, 11:37:43 »
Als ik het commando uitvoer in de shell werkt het wel maar als ik hem gebruik in het script werkt het niet.
Ik krijg dan de volgende foutmelding:

: File name too long42,0974
Mijn bestand ziet er zo uit:

cat -A tests/temp/coor
T0042,0974^MT0041,0974^MT0041,0974^MT0041,0973^MT0041,0973^MT0041,0973^MT0040,0973^MT0040,0972^MT0040,0971^MT0040,0970^MT0040,0969^MT0041,0969^MT0041,0969^MT0042,0970^MR0043,0970^MT0048,0967^MT0048,0966^MT0048,0966^MT0047,0965^MT0047,0964^MT0047,0964^MT0047,0963^MT0047,0963^MT0047,0964^MR0048,0965^MT0042,0963^MT0042,0963^MT0042,0963^MT0042,0962^MT0042,0962^MT0041,0961^MT0041,0960^MT0041,0958^MT0041,0957^MT0042,0957^MR0042,0957^MT0054,0972^MT0054,0972^MT0054,0972^MT0053,0972^MT0053,0972^MT0053,0972^MT0053,0972^MT0053,0971^MT0054,0971^MR0054,0971^MT0039,0975^MT0039,0975^MT0039,0974^MT0039,0974^MT0039,0974^MT0039,0973^MR0039,0972^M^MS

Ik werk ook wel op deze manier om een stuk uit bestand uit te lezen:

while read inputline
do
log="$(echo $inputline | cut -d/ -f1)"
done < $properties

Is dit ook mogelijk voor alleen de eerste regel? Of het eerste woord?

Offline djurny

  • Lid
  • Steunpunt: Nee
Re: GREP / AWK Nummers uit string "vb R1234,1234"
« Reactie #5 Gepost op: 2010/02/02, 12:14:14 »
zo te zien bestaat de file maar uit 1 regel ;) je hebt denk ik een dos2unix, cr/lf geval te pakken..
de manier die je zelf aandraagt met 'cat file | cut -d/ -f1 | awk ..' zou prima werken..
echo "Ka Me Ha Me Ha Me Ha!" | tr [A-Z] [a-z]

Offline marrrriej

  • Lid
  • Steunpunt: Nee
Re: GREP / AWK Nummers uit string "vb R1234,1234"
« Reactie #6 Gepost op: 2010/02/02, 14:57:58 »
Deze optie werkt ook niet.

ik heb het geprobeerd in de shell dan werkt het wel maar niet als ik het in mijn script zet.
Hij geeft dan weer dezelfde fout over filename to long.

De data komt vanaf een VCP (Virtual Com Port) Het zijn de coordinaten die door de touchscreen worden teruggegeven als er op getikt wordt.

Als eerste filter ik de extra informatie al weg van picocom. De rest zet ik in een nieuw bestand. Als deze geopend wordt zijn de enters wel te zien (oftewel onder elkaar) maar als ik CAT doet dan is het een grote rij.  om het weg te schrijven naar een bestand gebruik ik of > of tee. Beide geeft hetzelfde resultaat.

Er moet dus een manier zijn om alleen de eerste paar tekens te lezen. Altijd maar 10 tekens.

Offline djurny

  • Lid
  • Steunpunt: Nee
Re: GREP / AWK Nummers uit string "vb R1234,1234"
« Reactie #7 Gepost op: 2010/02/02, 15:21:51 »
ik zal hier vanavond even naar kijken :)
moet inderdaad niet al te moeilijk zijn..
(ook al lijkt dat vaak zo op het eerste gezicht ;))
echo "Ka Me Ha Me Ha Me Ha!" | tr [A-Z] [a-z]

Offline marrrriej

  • Lid
  • Steunpunt: Nee
Re: GREP / AWK Nummers uit string "vb R1234,1234"
« Reactie #8 Gepost op: 2010/02/02, 15:36:04 »
Oplossing gevonden:

grep '[0-9]' $file > $file2
RB=`grep '' $file2 | cut -c 1-10`
echo $RB

A=$( echo $RB | sed -n ...)
A=$( echo $RB | sed -n ...)

Bedankt!

Offline marrrriej

  • Lid
  • Steunpunt: Nee
Re: GREP / AWK Nummers uit string "vb R1234,1234"
« Reactie #9 Gepost op: 2010/02/03, 08:59:10 »
Hoi,

Ik loop alleen nog tegen een probleem aan.

De coordinaten worden live in een bestand gezet. Het is de bedoeling dat de touchscreen wordt aangetikt, de data wordt uitgelezen, volgende plek op het scherm, weer nieuwe data uitlezen... enzovoort.

Helaas als ik 1 keer het bestand uitlees en een deel van het resultaat in een ander document zet. Kan de VCP de output niet meer wegschrijven en komt er dus geen nieuwe data in de file en heeft het ook geen zin om deze uit te lezen.

Is er een mogeljikheid dat de ene app in een bestand blijft schrijven en de een andere applicatie alleen in het document leest?
Aan de hand van een pipe bijvoorbeeld?