Script des Tages: ruler

Vom einfachen Programm zum fertigen Debian-Paket, Fragen rund um Programmiersprachen, Scripting und Lizenzierung.
Benutzeravatar
r900
Beiträge: 1053
Registriert: 09.10.2011 20:06:11
Lizenz eigener Beiträge: GNU Free Documentation License
Wohnort: Stockholm

Re: Script des Tages: ruler

Beitrag von r900 » 17.03.2013 12:09:09

linuxCowboy hat geschrieben: e ist ein regulärer hardlink.
Durch ewiges wiederholen wird das auch nicht besser. Dann leg dir noch einen für seq an und dann kommst du auf 83.

Für einen richtigen Vergleich sieht dein code jedenfalls so aus:
linuxCowboy hat geschrieben:

Code: Alles auswählen

c=$COLUMNS;for i in `seq $((c/10))`;do echo -n 12345678_$((i%10));done;seq -s '' $((c%10)) # 90
12345678_112345678_212345678_312345678_412345678_512345678_612345678_712345678_812345678_912345678_012345678_112
Mit while und printf kannst du noch ein paar Zeichen rausquetschen

Code: Alles auswählen

i=;c=$COLUMNS;while((i++<c/10));do printf 12345678_$((i%10));done;seq -s '' $((c%10)) # 85
12345678_112345678_212345678_312345678_412345678_512345678_612345678_712345678_812345678_912345678_012345678_112
Oder hey, ich behaupte einfach p ist ein hardlink!

Code: Alles auswählen

i=;c=$COLUMNS;while((i++<c/10));do p 12345678_$((i%10));done;seq -s '' $((c%10)) # 80
12345678_112345678_212345678_312345678_412345678_512345678_612345678_712345678_812345678_912345678_012345678_112
Zuletzt geändert von r900 am 17.03.2013 21:03:58, insgesamt 1-mal geändert.

linuxCowboy
Beiträge: 287
Registriert: 05.02.2013 19:47:41

Re: Script des Tages: ruler

Beitrag von linuxCowboy » 17.03.2013 16:28:39

r900 hat geschrieben:Mit while und printf kannst du noch ein paar Zeichen rausquetschen
Die while Schleife überzeugt mich!

Code: Alles auswählen

i=;c=$COLUMNS;while((i++<c/10));do e -n 12345678_$((i%10));done;seq -s '' $((c%10)) # 83
12345678_112345678_212345678_312345678_412345678_512345678_612345678_712345678_812345678_912345678_012345678_112
Den e hardlink sollte es von Haus aus geben. Einer meiner (der) meistgenutzen Befehle.
Wie ll. Niemand schreibt ls -l.

Im Gegensatz zum Softlink braucht er keinen extra Speicherblock.
Im Gegensatz zum Alias ist er immer verfügbar.

Wer den hardlink nicht hat, sollte ihn anlegen.
Wer das nicht will, muss echo ausschreiben.
Wer das gar nicht mitkriegt, hat ganz andere Probleme.
r900 hat geschrieben:Oder hey, ich behaupte einfach p ist ein hardlink!
p wäre wirklich willkürlich. Zu selten gebraucht. (und bei mir ping -c 3)

Damit ist aber wohl das Ende der Fahnenstange erreicht. Besser gehts nicht!??
Zuletzt geändert von linuxCowboy am 21.03.2013 09:16:34, insgesamt 1-mal geändert.
-der_linux_cowboy --- Besser werden! ... f*** w$$

Benutzeravatar
Meillo
Moderator
Beiträge: 8813
Registriert: 21.06.2005 14:55:06
Wohnort: Balmora
Kontaktdaten:

Re: Script des Tages: ruler

Beitrag von Meillo » 17.03.2013 17:11:59

linuxCowboy hat geschrieben: Wie ll. Niemand schreibt ls -l.
Interaktiv ja, aber was Scripte betrifft sollte man unbedingt `ls -l' schreiben.
r900 hat geschrieben:Oder hey, ich behaupte einfach p ist ein hardlink!
p wäre wirklich willkürlich. Zu selten gebraucht. (und bei mir ping -c 3)
Die Unterscheidung zwischen willkuerlich und sinnvoll ist subjektiv. Auf deinem System darfst du gerne tun was du willst und es ist ja auch gerade schoen, dass Unix einen dazu motiviert das zu tun, aber wenn es um Scripte geht und um den Austausch von Code, dann ist es sinnvoll auf Portabilitaet zu achten, denke ich.


Ach, es bleibt dabei, dass ich gerne sehen wuerde, dass du das einsiehst. Aber warum darauf hoffen? Ich belaestige euch in diesem Thread nicht laenger. ;-)
Use ed once in a while!

Benutzeravatar
r900
Beiträge: 1053
Registriert: 09.10.2011 20:06:11
Lizenz eigener Beiträge: GNU Free Documentation License
Wohnort: Stockholm

Re: Script des Tages: ruler

Beitrag von r900 » 17.03.2013 17:15:33

linuxCowboy hat geschrieben:Im Gegensatz zum Softlink braucht er keinen extra Speicherblock.
Im Gegensatz zum Alias ist er immer verfügbar.
Mag sein, aber

Code: Alles auswählen

$ type echo
echo is a shell builtin
Dein e führt also immer /bin/echo aus anstatt des shell-internen Kommandos.
linuxCowboy hat geschrieben:p wäre wirklich willkürlich. Zu selten gebraucht. (und bei mir ping -c 3)
Egal ob e oder p, beides ist Willkür.

linuxCowboy
Beiträge: 287
Registriert: 05.02.2013 19:47:41

Re: Script des Tages: ruler

Beitrag von linuxCowboy » 17.03.2013 18:30:08

bash legt vor:

Code: Alles auswählen

i=;c=$COLUMNS;while((i++<c/10));do e -n 12345678_$((i%10));done;seq -s '' $((c%10)) # 83
12345678_112345678_212345678_312345678_412345678_512345678_612345678_712345678_812345678_912345678_012345678_112
perl arbeitet daran:

Code: Alles auswählen

e $COLUMNS|perl -nE '$c=$_;while(++$i<=$c/10){print "12345678_" . $i%10}END{say substr("123456789",0,$c%10)}' # 109
12345678_112345678_212345678_312345678_412345678_512345678_612345678_712345678_812345678_912345678_012345678_112
Muss sich Meister perl hier wirklich geschlagen geben!??
-der_linux_cowboy --- Besser werden! ... f*** w$$

Benutzeravatar
r900
Beiträge: 1053
Registriert: 09.10.2011 20:06:11
Lizenz eigener Beiträge: GNU Free Documentation License
Wohnort: Stockholm

Re: Script des Tages: ruler

Beitrag von r900 » 17.03.2013 19:01:50

Huch, da war doch gerade noch was von Liffi??

Na jedenfalls so ist es kürzer und kommt ganz ohne "e" aus:

Code: Alles auswählen

perl -E '$c='$COLUMNS';while(++$i<=$c/10){print "12345678_" . $i%10}END{say substr("123456789",0,$c%10)}'
12345678_112345678_212345678_312345678_412345678_512345678_612345678_712345678_812345678_912345678_012345678_112

Liffi
Beiträge: 2306
Registriert: 02.10.2004 01:33:05

Re: Script des Tages: ruler

Beitrag von Liffi » 17.03.2013 19:08:50

r900 hat geschrieben:Huch, da war doch gerade noch was von Liffi??
Ich wollte eine kürzere Perl Version bringen. Hab aber versagt :-D.

EDIT:: wobei mir nicht ganz klar ist, wofür ihr 'END' braucht.

EDIT2:: 'END' und Leerzeichen gelöscht.

Code: Alles auswählen

perl -E '$c='$COLUMNS';while(++$i<=$c/10){print "12345678_".$i%10}{say substr("123456789",0,$c%10)}'

Benutzeravatar
Meillo
Moderator
Beiträge: 8813
Registriert: 21.06.2005 14:55:06
Wohnort: Balmora
Kontaktdaten:

Re: Script des Tages: ruler

Beitrag von Meillo » 17.03.2013 20:14:19

Liffi hat geschrieben: EDIT2:: 'END' und Leerzeichen gelöscht.

Code: Alles auswählen

perl -E '$c='$COLUMNS';while(++$i<=$c/10){print "12345678_".$i%10}{say substr("123456789",0,$c%10)}'
btw: Das zweite Paar geschweifter Klammern kann man weglassen.


(Ich kann halt doch nicht meine Klappe halten. :oops: ... aber schoen zu sehen, dass es inhaltlich nun in eine andere Richtung geht. Weiter so!)
Use ed once in a while!

Benutzeravatar
goeb
Beiträge: 348
Registriert: 26.08.2006 18:12:08
Lizenz eigener Beiträge: MIT Lizenz

Re: Script des Tages: ruler

Beitrag von goeb » 17.03.2013 21:04:44

Code: Alles auswählen

perl -E '$c='$COLUMNS';while(++$i<=$c/10){print 1..8,"_",$i%10}say 1..$c%10'
Edit: Noch kürzer:

Code: Alles auswählen

perl -E '$c='$COLUMNS';print 1..8,"_",$i%10 while++$i<=$c/10;say 1..$c%10'
Edit: 3 weniger:

Code: Alles auswählen

perl -E '$c='$COLUMNS';print 1..8,"_",$_%10for++$i..$c/10;say 1..$c%10'
Edit: jetzt aber:

Code: Alles auswählen

perl -E'$c='$COLUMNS';print 1..8,"_",$_%10for 1..$c/10;say 1..$c%10'

Benutzeravatar
r900
Beiträge: 1053
Registriert: 09.10.2011 20:06:11
Lizenz eigener Beiträge: GNU Free Documentation License
Wohnort: Stockholm

Re: Script des Tages: ruler

Beitrag von r900 » 17.03.2013 21:32:39

goeb hat geschrieben:Edit: jetzt aber:

Code: Alles auswählen

perl -E '$c='$COLUMNS';print 1..8,"_",$_%10for 1..$c/10;say 1..$c%10'
Wer braucht schon Leer- und Anführungszeichen.. perl scheinbar nicht 8O

Code: Alles auswählen

perl -E'$c='$COLUMNS';print 1..8,_,$_%10for 1..$c/10;say 1..$c%10'
12345678_112345678_212345678_312345678_412345678_512345678_6123456

Benutzeravatar
Meillo
Moderator
Beiträge: 8813
Registriert: 21.06.2005 14:55:06
Wohnort: Balmora
Kontaktdaten:

Re: Script des Tages: ruler

Beitrag von Meillo » 17.03.2013 22:04:54

Noch drei Zeichen weniger:

Code: Alles auswählen

perl -E"print 1..8,_,\$_ for 1..$COLUMNS/10;say 1..$COLUMNS%10"
Und nochmal eines kuerzer:

Code: Alles auswählen

c=$COLUMNS;perl -E"print 1..8,_,\$_ for 1..$c/10;say 1..$c%10"
EDIT:
Mist, die funktionieren nur bis 100.
Use ed once in a while!

linuxCowboy
Beiträge: 287
Registriert: 05.02.2013 19:47:41

Re: Script des Tages: ruler

Beitrag von linuxCowboy » 17.03.2013 22:28:34

Code: Alles auswählen

c=$COLUMNS;perl -E"print 1..8,_,\$_%10for 1..$c/10;say 1..$c%10"
12345678_112345678_212345678_312345678_412345678_512345678_61234
Ihr seid klasse!

Und perl ist das Beste!!
-der_linux_cowboy --- Besser werden! ... f*** w$$

Benutzeravatar
Dogge
Beiträge: 1895
Registriert: 13.09.2010 11:07:33
Lizenz eigener Beiträge: MIT Lizenz

Re: Script des Tages: ruler

Beitrag von Dogge » 17.03.2013 22:28:59

Ich finde es echt faszinierend, wie ihr hier solche Gebilde aus dem Ärmel schüttelt. Wenn ich mal arbeitslos oder lange krank bin (was ich eigentlich beides nicht herbei wünsche) werde ich mich auch mal damit beschäftigen. Aber im normalen Alltag fehlt mir dazu die Zeit und am Wochenende oder im Urlaub möchte man die Zeit dann nicht wirklich für so etwas nutzen. Da muss das System einfach funktionieren und man hat keine Zeit/Lust sich zu "verkünsteln".

Ich war schon stolz auf mich, als ich neulich folgendes erarbeitet habe um mal alle Debug-Pakete aus dem Weg zu räumen, die sich nach diversen Bugreports angesammelt haben.

Code: Alles auswählen

apt-get remove $(dpkg -l | grep -e "-dbg " | awk '{print $2}')
Sowas ist für euch wahrscheinlich kein müdes Lächeln wert. :D

Sorry fürs OffTopic, aber das wollte ich jetzt los werden. :)
Debian Testing + Gnome | Linux-Anfänger seit 04/2003
http://files.mdosch.de/2014-07/0xE13D657D.asc

linuxCowboy
Beiträge: 287
Registriert: 05.02.2013 19:47:41

Re: Script des Tages: ruler

Beitrag von linuxCowboy » 18.03.2013 14:26:15

Mach doch einen eigenen Thread auf und lass deinen Code optimieren:

Code: Alles auswählen

# aptitude installed not_auto
ap search '~i !~M -dbg$'

Code: Alles auswählen

# simulate
ap -s remove '~i !~M -dbg$'
-der_linux_cowboy
-der_linux_cowboy --- Besser werden! ... f*** w$$

Benutzeravatar
Dogge
Beiträge: 1895
Registriert: 13.09.2010 11:07:33
Lizenz eigener Beiträge: MIT Lizenz

Re: Script des Tages: ruler

Beitrag von Dogge » 18.03.2013 14:31:42

Hmm, dann lieber ein paar Zeichen länger, aber ich weiß was es tut. :D
Debian Testing + Gnome | Linux-Anfänger seit 04/2003
http://files.mdosch.de/2014-07/0xE13D657D.asc

Benutzeravatar
Meillo
Moderator
Beiträge: 8813
Registriert: 21.06.2005 14:55:06
Wohnort: Balmora
Kontaktdaten:

Re: Script des Tages: ruler

Beitrag von Meillo » 18.03.2013 14:53:50

linuxCowboy hat geschrieben:Mach doch einen eigenen Thread auf und lass deinen Code optimieren:
Ha! Dafuer sollten wir unbedingt ein neues Unterforum anlegen lassen. Nach dem Motto: Poste deinen Code und wir optimieren (= verkuerzen) ihn fuer dich. Das wird garantiert grandios einschlagen. :-D
Use ed once in a while!

Benutzeravatar
habakug
Moderator
Beiträge: 4313
Registriert: 23.10.2004 13:08:41
Lizenz eigener Beiträge: MIT Lizenz

Re: Script des Tages: ruler

Beitrag von habakug » 19.03.2013 00:56:02

Hallo!

Code: Alles auswählen

$ echo -e \\b"12345678_"{1..8}  # 28 
12345678_112345678_212345678_312345678_412345678_512345678_612345678_712345678_8
( # = root | $ = user | !! = mod ) (Vor der PN) (Debianforum-Wiki) (NoPaste)

linuxCowboy
Beiträge: 287
Registriert: 05.02.2013 19:47:41

Re: Script des Tages: ruler

Beitrag von linuxCowboy » 19.03.2013 01:01:54

Teufelskerl!

Code: Alles auswählen

e -e \\b12345678_{1..8} # 23
12345678_112345678_2123
Die bash schlägt zurück!

Code: Alles auswählen

c=8;eval "e -e \\\\b12345678_{1..${c}}"
12345678_112345678_212345678_312345678_
-der_linux_cowboy --- Besser werden! ... f*** w$$

Benutzeravatar
Meillo
Moderator
Beiträge: 8813
Registriert: 21.06.2005 14:55:06
Wohnort: Balmora
Kontaktdaten:

Re: Script des Tages: ruler

Beitrag von Meillo » 19.03.2013 08:18:54

habakug hat geschrieben:

Code: Alles auswählen

$ echo -e \\b"12345678_"{1..8}  # 28 
12345678_112345678_212345678_312345678_412345678_512345678_612345678_712345678_8
Uff ... Respekt! Das ist zwar unportabel, aber der kreative Ansatz beeindruckt mich. :-)

btw: Wenn du das `\b' noch in die Quotes packst, dann musst du den Backslash nicht escapen und sparst damit noch ein Zeichen. ;-)
Use ed once in a while!

linuxCowboy
Beiträge: 287
Registriert: 05.02.2013 19:47:41

Re: Script des Tages: ruler

Beitrag von linuxCowboy » 19.03.2013 15:26:19

state of play

Champion perl:

Code: Alles auswählen

c=$COLUMNS;perl -E"print 1..8,_,\$_%10for 1..$c/10;say 1..$c%10" # 64
12345678_112345678_212345678_312345678_412345678_512345678_61234
Underdog bash:

Code: Alles auswählen

i=;while((i++<$COLUMNS));do((i%10))&&e -n $((i%10))||e -ne \\b_$((i/10%10));done # 80
12345678_112345678_212345678_312345678_412345678_512345678_612345678_712345678_8
Gelingt die Sensation!??

Edit: -1

Code: Alles auswählen

for i in `seq $COLUMNS`;do((i%10))&&e -n $((i%10))||e -ne \\b_$((i/10%10));done # 79
12345678_112345678_212345678_312345678_412345678_512345678_612345678_712345678_
-der_linux_cowboy --- Besser werden! ... f*** w$$

Benutzeravatar
ThorstenS
Beiträge: 2875
Registriert: 24.04.2004 15:33:31

Re: Script des Tages: ruler

Beitrag von ThorstenS » 19.03.2013 16:11:03

Die echo -e \\b-Lösung ist wirklich großartig! :hail:

ChronoBoost
Beiträge: 140
Registriert: 29.01.2013 11:03:50

Re: Script des Tages: ruler

Beitrag von ChronoBoost » 19.03.2013 17:50:56

ThorstenS hat geschrieben:Die echo -e \\b-Lösung ist wirklich großartig! :hail:
Ich schließe mich dem an. Sehr elegant/clever gelöst.

linuxCowboy
Beiträge: 287
Registriert: 05.02.2013 19:47:41

Re: Script des Tages: ruler

Beitrag von linuxCowboy » 20.03.2013 17:19:54

bash:

Code: Alles auswählen

printf "%c" $(seq $COLUMNS|sed -r 's/9$/_/;s/(.)0/\1/'|rev) # 59
12345678_112345678_212345678_312345678_412345678_512345678_
Sensation perfekt!?

Edit: -1

Code: Alles auswählen

printf "%c" `seq $COLUMNS|sed -r 's/9$/_/;s/(.)0/\1/'|rev` # 58
12345678_112345678_212345678_312345678_412345678_512345678
-der_linux_cowboy --- Besser werden! ... f*** w$$

Benutzeravatar
ThorstenS
Beiträge: 2875
Registriert: 24.04.2004 15:33:31

Re: Script des Tages: ruler

Beitrag von ThorstenS » 21.03.2013 09:20:02

Code: Alles auswählen

printf %c `seq $COLUMNS|sed -r 's/9$/_/;s/(.)0/\1/'|rev` # 56

linuxCowboy
Beiträge: 287
Registriert: 05.02.2013 19:47:41

Re: Script des Tages: ruler

Beitrag von linuxCowboy » 22.03.2013 00:38:08

bash legt nach:

Code: Alles auswählen

printf %c `seq $COLUMNS|sed 's/9$/_/;s/\(.\)0/\1/'|rev` # 55
12345678_112345678_212345678_312345678_412345678_512345
-der_linux_cowboy --- Besser werden! ... f*** w$$

Antworten