Zahl drehen in der Shell- wie?
- Jerry
- Beiträge: 665
- Registriert: 01.09.2006 08:36:45
- Lizenz eigener Beiträge: MIT Lizenz
- Wohnort: /home
Zahl drehen in der Shell- wie?
Moin,
Wie kann man eine Zahl innerhalb der Shell drehen?
z.b. hox=82
echo $hox -> 82
gewollt ist aber 28
wie kann die Reihenfolge drehen?
Danke
Wolf
Wie kann man eine Zahl innerhalb der Shell drehen?
z.b. hox=82
echo $hox -> 82
gewollt ist aber 28
wie kann die Reihenfolge drehen?
Danke
Wolf
Selbst der längste Weg beginnt mit dem ersten Schritt Lao Tse (~ 600-400 v. Chr.)
Re: Zahl drehen in der Shell- wie?
Ob Zahl oder String ist irrelevant, in der Shell ist alles ein String.
Nicht portabel, funktioniert aber mit gawk:
EDIT:
Portabel geht's so:
Nicht portabel, funktioniert aber mit gawk:
Code: Alles auswählen
echo abc | gawk -F '' '{for (i=NF; i>0; i--) {printf $i} }'
Portabel geht's so:
Code: Alles auswählen
echo abc | awk '{for (i=length; i>0; i--) {printf substr($0, i, 1)} }'
Use ed once in a while!
- Jerry
- Beiträge: 665
- Registriert: 01.09.2006 08:36:45
- Lizenz eigener Beiträge: MIT Lizenz
- Wohnort: /home
Re: Zahl drehen in der Shell- wie?
Dank für deine Antwort nur brauche ich eine Lösung die ohne (g)awk oder ähnliches geht, deshlab suche ich ja auch schon seit Stunden ....
Selbst der längste Weg beginnt mit dem ersten Schritt Lao Tse (~ 600-400 v. Chr.)
-
- Beiträge: 3472
- Registriert: 30.11.2005 10:32:22
- Lizenz eigener Beiträge: MIT Lizenz
- Wohnort: Wald
Re: Zahl drehen in der Shell- wie?
Code: Alles auswählen
echo 82 | rev
- Jerry
- Beiträge: 665
- Registriert: 01.09.2006 08:36:45
- Lizenz eigener Beiträge: MIT Lizenz
- Wohnort: /home
Re: Zahl drehen in der Shell- wie?
-sh: rev: not found
Selbst der längste Weg beginnt mit dem ersten Schritt Lao Tse (~ 600-400 v. Chr.)
-
- Beiträge: 3472
- Registriert: 30.11.2005 10:32:22
- Lizenz eigener Beiträge: MIT Lizenz
- Wohnort: Wald
Re: Zahl drehen in der Shell- wie?
Ist im Paket util-linux, das als essentielles Paket eigentlich installiert sein sollte.
Re: Zahl drehen in der Shell- wie?
Jerry hat geschrieben:-sh: rev: not found
Code: Alles auswählen
dpkg -S rev |grep `which rev`
Zuletzt geändert von 123456 am 16.10.2009 12:16:12, insgesamt 1-mal geändert.
- Jerry
- Beiträge: 665
- Registriert: 01.09.2006 08:36:45
- Lizenz eigener Beiträge: MIT Lizenz
- Wohnort: /home
Re: Zahl drehen in der Shell- wie?
Ich hätte dazu schreiben sollen das es sich um einen embedded Controller handelt der noch kein Debian hat ....Spasswolf hat geschrieben:Ist im Paket util-linux, das als essentielles Paket eigentlich installiert sein sollte.
Selbst der längste Weg beginnt mit dem ersten Schritt Lao Tse (~ 600-400 v. Chr.)
-
- Beiträge: 3472
- Registriert: 30.11.2005 10:32:22
- Lizenz eigener Beiträge: MIT Lizenz
- Wohnort: Wald
Re: Zahl drehen in der Shell- wie?
Ich hab schon befürchtet das jetzt sowas kommt ...
Re: Zahl drehen in der Shell- wie?
Heißt das, du willst ein C-Programm? Denn wenn du kein awk hast, hast du wohl so gut wie gar nichts.Jerry hat geschrieben:Ich hätte dazu schreiben sollen das es sich um einen embedded Controller handelt der noch kein Debian hat ....
Hier hast du's in C:
Code: Alles auswählen
#include <stdio.h>
#include <string.h>
#define MAXLINE 1024
int
main()
{
int i;
char line[MAXLINE];
while (fgets(line, MAXLINE, stdin)) {
for (i = strlen(line)-1; i > 0; i--) {
putchar(line[i-1]);
}
putchar('\n');
}
return 0;
}
Use ed once in a while!
Re: Zahl drehen in der Shell- wie?
Oder direkt in bash, z.B.
Edit: unnötige Variable entfernt
Code: Alles auswählen
#!/bin/bash
in="hello world"
out=""
len=${#in}
while [ $len -gt 0 ]; do
let len=len-1
out=$out"${in:$len:1}"
done
echo $out
Zuletzt geändert von GoKi am 16.10.2009 22:32:53, insgesamt 1-mal geändert.
MfG GoKi
:wq
:wq
Re: Zahl drehen in der Shell- wie?
Jerry hat geschrieben:Moin,
Wie kann man eine Zahl innerhalb der Shell drehen?
z.b. hox=82
echo $hox -> 82
gewollt ist aber 28
wie kann die Reihenfolge drehen?
Code: Alles auswählen
chrisbra@t41:~$ echo 82 |perl -lne 'print join("", reverse(split(//)));'
28
Meine Whishlist
:wq!
:wq!
-
- Beiträge: 3472
- Registriert: 30.11.2005 10:32:22
- Lizenz eigener Beiträge: MIT Lizenz
- Wohnort: Wald
Re: Zahl drehen in der Shell- wie?
@GoKi
Das funktioniert aber nur in der bash, wer weiß welche Shell auf dem embedded Device zu finden ist.
Das funktioniert aber nur in der bash, wer weiß welche Shell auf dem embedded Device zu finden ist.
Re: Zahl drehen in der Shell- wie?
Hab ich was anderes behauptet?Spasswolf hat geschrieben:@GoKi
Das funktioniert aber nur in der bash, wer weiß welche Shell auf dem embedded Device zu finden ist.
Mit expr und seq in einer Posix Shell (habe dash benutzt, bzw. ash aus busybox) sollte es so tun...
Code: Alles auswählen
#!/bin/sh
in="hello world"
out=""
len=`expr length "$in"`
for i in `seq $len -1 1`; do
out=$out"`expr substr "$in" $i 1`"
done
echo $out
MfG GoKi
:wq
:wq
- Jerry
- Beiträge: 665
- Registriert: 01.09.2006 08:36:45
- Lizenz eigener Beiträge: MIT Lizenz
- Wohnort: /home
Re: Zahl drehen in der Shell- wie?
Zuerst mal Danke an alle die geholfen haben. Besonderer Dank an Goki, seine Lösung hat funktioniert.
Gruß
Wolf
Gruß
Wolf
Selbst der längste Weg beginnt mit dem ersten Schritt Lao Tse (~ 600-400 v. Chr.)
Re: Zahl drehen in der Shell- wie?
Nette Lösung.GoKi hat geschrieben:Mit expr und seq in einer Posix Shell (habe dash benutzt, bzw. ash aus busybox) sollte es so tun...Code: Alles auswählen
#!/bin/sh in="hello world" out="" len=`expr length "$in"` for i in `seq $len -1 1`; do out=$out"`expr substr "$in" $i 1`" done echo $out
Ich will nicht pedantisch sein, sondern nur anmerken, dass:
- seq von der SUSv3 nicht erwähnt wird. Es ist zwar auf sehr vielen Systemen vorhanden, muss aber nicht. Kann man durch eine Zählvariable in einer while-Schleife ersetzen. Das liest sich dann nicht mehr so schön, erfüllt aber den gleichen Zweck.
- expr laut SUSv3 ``length'' und ``substr'' nicht kennen muss. Siehe:
Das lässt sich AFAIK leider nicht anders abbilden.The use of string arguments length, substr, index, or match produces unspecified results.
Aber hier hat GoKis Code ja geholfen, somit war er ausreichend gut ... und mehr muss ja nicht sein.
Use ed once in a while!
Re: Zahl drehen in der Shell- wie?
Braucht man aber eigentlich beides nicht, sofern fold vorhanden ist (Was es auf meinem Rechner mit busybox nicht ist). Man kann fold nutzen, um den Eingabestring in einzelne Characters aufzuplitten.Meillo hat geschrieben:- seq von der SUSv3 nicht erwähnt wird.
- expr laut SUSv3 ``length'' und ``substr'' nicht kennen muss.
Code: Alles auswählen
#!/bin/sh
in="hello world"
out=""
IFS='
'
for c in `echo "$in" | fold -w 1`; do
out="$c""$out"
done
echo $out
MfG GoKi
:wq
:wq
Re: Zahl drehen in der Shell- wie?
Sehr schöne Lösung ... jetzt bin auch ich zufrieden.GoKi hat geschrieben:Man kann fold nutzen, um den Eingabestring in einzelne Characters aufzuplitten.Code: Alles auswählen
#!/bin/sh in="hello world" out="" IFS=' ' for c in `echo "$in" | fold -w 1`; do out="$c""$out" done echo $out
Use ed once in a while!
Re: Zahl drehen in der Shell- wie?
Nimm sedGoKi hat geschrieben:Man kann fold nutzen, um den Eingabestring in einzelne Characters aufzuplitten.Aber das eigentliche Problem scheint ja schon gelöst zu sein.Code: Alles auswählen
#!/bin/sh in="hello world" out="" IFS=' ' for c in `echo "$in" | fold -w 1`; do out="$c""$out" done echo $out
Code: Alles auswählen
#!/bin/sh
in="hello world"
out=""
IFS='
'
for c in `echo "$in" | sed -e "s/./&\n/g"`; do
out="$c""$out"
done
echo $out
Christian
Meine Whishlist
:wq!
:wq!
Re: Zahl drehen in der Shell- wie?
Schöne Lösung!
Wobei es auch mit der altmodischen Zeile funktioniert.
Wo war nochmal der Unterschied zwischen dem & und dem \1 bei sed?
Wobei es auch mit der altmodischen Zeile
Code: Alles auswählen
for c in $(echo "$in" | sed -e "s/\(.\)/\1\n/g")
Wo war nochmal der Unterschied zwischen dem & und dem \1 bei sed?
Oh, yeah!
Re: Zahl drehen in der Shell- wie?
& steht für den kompletten Match, \1 für die erste Subexpression. Ich finde & schön, Subexpressions dagegen nutze ich nur wenn nötig.Duff hat geschrieben:Wo war nochmal der Unterschied zwischen dem & und dem \1 bei sed?
Altmodisch ist in diesem Zusammenhang irrelevant -- beides ist gleich alt, von ed nämlich.
Use ed once in a while!
Re: Zahl drehen in der Shell- wie?
Danke für die Erklärung.
Beim & brauche ich dann keine Klammern \( und \), um das Matching zu speichern.
Beim & brauche ich dann keine Klammern \( und \), um das Matching zu speichern.
Oh, yeah!
Re: Zahl drehen in der Shell- wie?
Korrekt. Es wird einfach der komplette Match eingesetzt.Duff hat geschrieben:Beim & brauche ich dann keine Klammern \( und \), um das Matching zu speichern.
Use ed once in a while!
Re: Zahl drehen in der Shell- wie?
Danke. Muss mir das & mal merken. Benutze nämlich immer die andere Variante.
Oh, yeah!