Scripting Contest

Vom einfachen Programm zum fertigen Debian-Paket, Fragen rund um Programmiersprachen, Scripting und Lizenzierung.
Antworten
Benutzeravatar
TRex
Moderator
Beiträge: 8038
Registriert: 23.11.2006 12:23:54
Lizenz eigener Beiträge: MIT Lizenz
Wohnort: KA

Re: Scripting Contest

Beitrag von TRex » 27.05.2018 22:41:43

Meillo hat geschrieben: ↑ zum Beitrag ↑
27.05.2018 22:17:39
@eggy: Clever, fuer diese Aufgabe R zu nehmen!
Ich hab auch darüber nachgedacht, python mit numpy/matplotlib zu nehmen... aber ich finde Portabilität der Form "wenige Abhängigkeiten" ist viel wert. Aber ja, spezialisierte Tools machen die Lösung gleich dreimal verständlicher und man erfindet das Rad nicht neu.

Die Formatierung hätte ich selbst vermutlich nicht so angelegt - viel zu kompliziert/starr zum Bearbeiten. Aber zum Posen auf superuser/stackoverflow taugts :D

@meillo: gutes Auge auf den leeren Klassen!
Jesus saves. Buddha does incremental backups.
Windows ist doof, Linux funktioniert nichtDon't break debian!Wie man widerspricht

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

Re: Scripting Contest

Beitrag von Meillo » 27.05.2018 22:44:24

TomL hat geschrieben: ↑ zum Beitrag ↑
27.05.2018 22:37:46
Meillo hat geschrieben: ↑ zum Beitrag ↑
27.05.2018 22:17:39
Btw: Die Formatierung von dem Code ist ja abgefahren ...
Nicht nur das.. ich find das insgesamt total abgefahren ....
Wenn man awk-Code gewohnt ist, ist dieser ganz in Ordnung. ;-)
1. Problem:

Code: Alles auswählen

du -bs ${1:-.}/* 
du: Warnung: Zusammenfassen widerspricht --max-depth=1
„du --help“ liefert weitere Informationen.
Kann ich nicht nachvollziehen. Bei mir laeufts problemlos.
2. Problem (Auszugsweise nur einige dieser "Fehler"):

Code: Alles auswählen

du -b --max-depth=0 ${1:-.}/*
du: Zugriff auf './proc/194/task/194/fd/3' nicht möglich: Datei oder Verzeichnis nicht gefunden
du: Zugriff auf './proc/194/task/194/fdinfo/3' nicht möglich: Datei oder Verzeichnis nicht gefunden
du: Zugriff auf './proc/194/fd/3' nicht möglich: Datei oder Verzeichnis nicht gefunden
du: Zugriff auf './proc/194/fdinfo/3' nicht möglich: Datei oder Verzeichnis nicht gefunden
Da hast du das Script wohl im root-Verzeichnis gestartet. Derartige Meldungen sind normal wenn man auf Dateien unterhalb von /proc zugreift.
Use ed once in a while!

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

Re: Scripting Contest

Beitrag von Meillo » 27.05.2018 22:51:20

Mein Script verwendet nur `du -s'. Wenn man weiss, dass man ein GNU du hat, ist `du -sb' besser (liefert Bytes). Fuer POSIX-Konformitaet ist `du -sk' die beste Wahl (liefert Kilobytes).

Ganz interessant dazu der Rationale-Abschnitt der POSIX-Seite zu du(1): http://pubs.opengroup.org/onlinepubs/96 ... es/du.html
Use ed once in a while!

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

Re: Scripting Contest

Beitrag von Meillo » 12.07.2018 22:16:41

Neue Aufgabe:

Implementiere ein Einfaerben der Matches fuer grep(1) (oder egrep(1)), ohne `--color' zu verwenden. Es geht also um irgendeine Art von Wrapper um grep(1), der die Treffer in der Ausgabe einfaerbt, so wie `grep --color' das tut.

Gesucht sind kreative Ansaetze. (Die Behandlung aller Randfaelle kann vernachlaessigt werden.)


Loesungen koennen ab kommendem Sonntag, 18:00 gepostet werden.
Use ed once in a while!

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

Re: Scripting Contest

Beitrag von Meillo » 15.07.2018 19:28:41

Hier meine Implementierung:

Code: Alles auswählen

#!/bin/sh

re="$1"
shift

start="`printf '\033[31;01m\033[K'`"
end="`printf '\033[m\033[K'`"

cmd=`egrep -on "$re" "$@" | sort -u | sed '
        s_\([0-9]*\):\(.*\)_NR==\1 {gsub("\2", "'"$start"'\2'"$end"'");print}_
'`
awk "$cmd" "$@" 
Die Idee ist, zweimal durch die Datei zu laufen. Beim ersten Mal mit `grep -on' nur die Matches mit Zeilennummer rauszuholen. Daraus baue ich dann mittels sed ein awk-Script. das beim zweiten Durchgang durch die Datei diese Matches einfaerbt. :-)

Robustheit ist was anderes, aber von der Herangehensweise finde ich die Aufgabe sehr spannend. Mal sehen, ob mir noch eine weitere Herangehensweise einfaellt ...

Die Terminalcolorescapes habe ich uebrigens von `grep --color' abgeschaut. Weiss jemand was das `\033[K' macht?


Die Idee dazu hatten ein Freund und ich neulich. Da dachte ich, dass sich das auch als Scripting-Contest-Aufgabe eignen wuerde. Nun bin ich auf weitere Loesungen, Ideen und Kommentare gespannt.
Use ed once in a while!

eggy
Beiträge: 3331
Registriert: 10.05.2008 11:23:50

Re: Scripting Contest

Beitrag von eggy » 15.07.2018 20:35:04


tobo
Beiträge: 1964
Registriert: 10.12.2008 10:51:41

Re: Scripting Contest

Beitrag von tobo » 15.07.2018 22:25:35

Soll das denn so sein, dass die Ausgabe bei Mehrfachtreffern auch mehrfach geschieht? Wenn ich z.B. diese Zeile in einer Datei habe:
#ifconfig eth0 192.168.10.1 netmask 255.255.255.0 up>
und ich suche nach
"[0-9]\.[0-9]+"
dann bekomme ich 4 Ausgabezeilen, unterschiedlich eingefärbt UND textlich (eth0.) verändert!? {EDIT: Beschränkt sich offensichtlich auf "[0-9]"}

Falls das jetzt lösungstechnisch nicht zwingend vorgeschrieben ist grep zu verwenden, um grep zu simulieren - sed kann ja auch direkt regex!? Nur umgeschrieben und "nicht" ausgiebig getestet:

Code: Alles auswählen

#!/bin/sh

re="$1"
shift

start="`printf '\033[31;01m'`"
end="`printf '\033[m'`"

sed -rn 's/'"$re"'/'"$start"'&'"$end"'/gp' "$@"

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

Re: Scripting Contest

Beitrag von Meillo » 16.07.2018 09:48:53

tobo hat geschrieben: ↑ zum Beitrag ↑
15.07.2018 22:25:35
Soll das denn so sein, dass die Ausgabe bei Mehrfachtreffern auch mehrfach geschieht? Wenn ich z.B. diese Zeile in einer Datei habe:
#ifconfig eth0 192.168.10.1 netmask 255.255.255.0 up>
und ich suche nach
"[0-9]\.[0-9]+"
dann bekomme ich 4 Ausgabezeilen, unterschiedlich eingefärbt UND textlich (eth0.) verändert!? {EDIT: Beschränkt sich offensichtlich auf "[0-9]"}
Du hast recht, das ist falsch. Es ist die Folge eines klassischen Problems bei der Softwareentwicklung. Ich habe die ganze Zeit mit diesem Code entwickelt und getestet:

Code: Alles auswählen

#!/bin/sh

re="$1"
shift

start="`printf '\033[31;01m\033[K'`"
end="`printf '\033[m\033[K'`"

cmd=`egrep -on "$re" "$@" | sort -u | sed '
        s_\([0-9]*\):\(.*\)_NR==\1 {gsub("\2", "'"$start"'\2'"$end"'")}_
'`
awk "$cmd;1" "$@"
Erst ganz am Ende habe ich realisiert, dass ich nur die gematchten Zeilen ausgeben sollte (also auch greppe und nicht nur highlighte). Folglich habe ich das ``;1'' in der letzten Zeile entfernt und in der sed-Ersetzung ein ``;print'' eingefuegt:

Code: Alles auswählen

#!/bin/sh

re="$1"
shift

start="`printf '\033[31;01m\033[K'`"
end="`printf '\033[m\033[K'`"

cmd=`egrep -on "$re" "$@" | sort -u | sed '
        s_\([0-9]*\):\(.*\)_NR==\1 {gsub("\2", "'"$start"'\2'"$end"'");print}_
'`
awk "$cmd" "$@"
... dachte mir, das wird schon passen. ;-)

Habe dann nur noch einen kleinen Test gemacht, der das Problem nicht gezeigt hat ...

Es ist ja nicht so, dass man dieses Problemszenario noch nie gesehen haette. Trotzdem faellt man drauf rein. Haette ich nur eine Testsuite geschrieben, die haette mich davor bewahrt! Also: Darum Testsuites schreiben! ... und auch laufen lassen!


Falls das jetzt lösungstechnisch nicht zwingend vorgeschrieben ist grep zu verwenden, um grep zu simulieren - sed kann ja auch direkt regex!? Nur umgeschrieben und "nicht" ausgiebig getestet:

Code: Alles auswählen

#!/bin/sh

re="$1"
shift

start="`printf '\033[31;01m'`"
end="`printf '\033[m'`"

sed -rn 's/'"$re"'/'"$start"'&'"$end"'/gp' "$@"
LOL! :lol: Da war ich ja mal super erfolgreich im unnoetig kompliziert sein. Von hinten durch die Brust ins Auge. :facepalm:

Danke, dass du mich aus meiner Denkrinne geholt hast. :THX:


Diese Aktion habe ich ja mal sowas von in den Sand gesetzt! :mrgreen:
Use ed once in a while!

tobo
Beiträge: 1964
Registriert: 10.12.2008 10:51:41

Re: Scripting Contest

Beitrag von tobo » 16.07.2018 19:21:45

Ich will ja nicht kleinlich sein, aber das stimmt immer noch nicht: Der Text wird am Anfang zu "eth0.1" ergänzt.
Die Rückgabe von egrep liefert:

Code: Alles auswählen

1:2.168
1:0.1
1:5.255
1:5.0
Und diese Rückgaben sind Strings, werden von AWK (bei der Suche) aber als RegEx behandelt, weswegen das "0.1" im Beispiel doppelt greift!? Das ist also ein grundsätzliches Problem. Ich habe mal ein bisschen probiert an \2 "zumzuquoten", mich dabei aber vom richtigen Ergebnis eher entfernt, weil ich von AWK halt schlicht keine Ahnung habe.

eggy
Beiträge: 3331
Registriert: 10.05.2008 11:23:50

Re: Scripting Contest

Beitrag von eggy » 19.07.2018 08:48:10

Ich sitz grad an nen SVG-Problemchen und wahrscheinlich gibts schon nen kleines Tool dafür (oder Inkscape kann das irgendwie) aber vielleicht hat der ein oder andere ja trotzdem Lust sich damit zu beschäftigen: Aus einer SVG-Datei sollen alle Shapes extrahiert werden, dabei soll pro Shape die Farbe und evtl ein Objektname ausgegeben werden, zu jedem Shape soll auch eine Liste der (absoluten) Koordinaten ausgegeben werden. Kurven sollen dabei in Linien umgewandelt werden.

Klingt erstmal einfach, interessant wirds dadurch, dass in so einem Pfad relative und absolute Koordinaten gemischt auftreten können, Bewegungen auf eine Achse eingeschränkt werden können, und am Ende nur die Punkte des Polygons ohne die Kontrollpunkte der Bezierkurven in der Liste erscheinen sollen.

https://www.w3schools.com/graphics/svg_path.asp

Beispieldatei: NoPaste-Eintrag40384

Wie üblich: Lösungen bitte erst ab Sonntag 18:00h posten

eggy
Beiträge: 3331
Registriert: 10.05.2008 11:23:50

Re: Scripting Contest

Beitrag von eggy » 19.12.2018 21:52:29

neuer Contest: Diesmal geht's um grafische Aufbereitung von Logfiles viewtopic.php?f=34&t=171699

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

Re: Scripting Contest

Beitrag von Meillo » 20.12.2018 12:59:06

eggy hat geschrieben: ↑ zum Beitrag ↑
19.12.2018 21:52:29
neuer Contest: Diesmal geht's um grafische Aufbereitung von Logfiles viewtopic.php?f=34&t=171699
Bitte die Loesungen im verlinkten Thread posten.
Use ed once in a while!

Benutzeravatar
ohnex
Beiträge: 391
Registriert: 31.01.2010 22:35:36

Re: Scripting Contest

Beitrag von ohnex » 21.12.2018 23:14:36

Hi

Schön das es hier weiter geht, freut mich :D

ciao

inne
Beiträge: 3273
Registriert: 29.06.2013 17:32:10
Lizenz eigener Beiträge: GNU General Public License
Kontaktdaten:

Re: Scripting Contest

Beitrag von inne » 01.06.2019 19:36:36

Eine neue Idee (Ein Schelm wer böses denkt :-)

Gegeben ist eine ASCII Plaintext Datei mit N Zeilen von unterschiedlicher Länge. Nun soll das Skript alle Zeilen ausgeben die min. 8 Zeichen und höchstens (max.) 16 Zeichen lang sind.

Abgabe Morgen oder So. nächste Woche. Ich habe eine Lösung, wo ich hoffe richtig "gegriffen" zu haben s. oben.

Benutzeravatar
TRex
Moderator
Beiträge: 8038
Registriert: 23.11.2006 12:23:54
Lizenz eigener Beiträge: MIT Lizenz
Wohnort: KA

Re: Scripting Contest

Beitrag von TRex » 01.06.2019 20:45:17

Das wird ein Einzeiler... Hab ich was übersehen?
Jesus saves. Buddha does incremental backups.
Windows ist doof, Linux funktioniert nichtDon't break debian!Wie man widerspricht

inne
Beiträge: 3273
Registriert: 29.06.2013 17:32:10
Lizenz eigener Beiträge: GNU General Public License
Kontaktdaten:

Re: Scripting Contest

Beitrag von inne » 01.06.2019 21:06:03

Nein! Ich verrate es. Ich habe einen RegEx dafür: ^.{8,16}$

Code: Alles auswählen

grep -E "^.{8,16}$"
Oder wenn man die Zeichenanzahl wissen will:

Code: Alles auswählen

awk '/^.{8,16}$/ {printf("%d\t%s", length($0), $0)}'
Nun dürfen bessere Lösungen mit Begründung veröffentlicht werden. Oder meine kritisiert^^

eggy
Beiträge: 3331
Registriert: 10.05.2008 11:23:50

Re: Scripting Contest

Beitrag von eggy » 02.06.2019 07:58:29

@inne: die Idee hinter der Woche Wartezeit ist, dass Leute sich unabhängig von einander Gedanken machen und daher auf völlig unterschiedliche Ansätze kommen, statt dem sonst üblichen "gute Lösung, aber das lässt sich noch optimieren". Für helft-mal-schnell haben wir ja noch den Rest vom Forum :mrgreen:

inne
Beiträge: 3273
Registriert: 29.06.2013 17:32:10
Lizenz eigener Beiträge: GNU General Public License
Kontaktdaten:

Re: Scripting Contest

Beitrag von inne » 02.06.2019 15:17:37

Du hast rechts eggy! Nun habe ich vorgelegt und Ihr müsst nachlegen. Wobei ich auch vergessen habe die Kriterien für den Sieg mit anzugeben, Schnelligkeit oder möglichst kurzer/unlesbarer Quellcode.

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

Re: Scripting Contest

Beitrag von ThorstenS » 03.06.2019 16:24:56

nicht besonders kurz, dafür aber sehr gut lesbar:

Code: Alles auswählen

awk 'length > 7 && length <17' $DATEI
Und die obligatorische Verbesserung bzgl. kürzerer Schreibweise:

Code: Alles auswählen

egrep "^.{8,16}$" $DATEI

inne
Beiträge: 3273
Registriert: 29.06.2013 17:32:10
Lizenz eigener Beiträge: GNU General Public License
Kontaktdaten:

Re: Scripting Contest

Beitrag von inne » 03.06.2019 17:40:29

ThorstenS hat geschrieben: ↑ zum Beitrag ↑
03.06.2019 16:24:56
Und die obligatorische Verbesserung bzgl. kürzerer Schreibweise:

Code: Alles auswählen

egrep "^.{8,16}$" $DATEI
Das egrep wird es aber wohl bald nicht mehr gegeben (zumindest in Debian)?

Benutzeravatar
TRex
Moderator
Beiträge: 8038
Registriert: 23.11.2006 12:23:54
Lizenz eigener Beiträge: MIT Lizenz
Wohnort: KA

Re: Scripting Contest

Beitrag von TRex » 03.06.2019 17:53:23

dann eben grep -e?
Jesus saves. Buddha does incremental backups.
Windows ist doof, Linux funktioniert nichtDon't break debian!Wie man widerspricht

eggy
Beiträge: 3331
Registriert: 10.05.2008 11:23:50

Re: Scripting Contest

Beitrag von eggy » 13.12.2019 06:48:12

Inspiriert durch ottonormal viewtopic.php?f=15&t=175788
Erzeuge ein PDF aus den dort eingescannten Doppelseiten, bei dem im PDF dann die Seiten richtig sortiert sind.
Klingt auf den ersten Blick nicht so komplex, aber mir fallen auf den ersten Blick bereits drei mögliche Lösungsansätze ein und ich bin sicher, dass einer von Euch was schöneres baut :mrgreen:
Deadline wäre von mir aus Sonntagabend 20:00h, falls jemand mitmachen will und mehr Zeit will, gerne auch später.

Benutzeravatar
heinz
Beiträge: 535
Registriert: 20.12.2007 01:43:49

Re: Scripting Contest

Beitrag von heinz » 03.02.2021 10:51:03

Hallo Zusammen,

angeregt durch die Diskussion hier:
viewtopic.php?f=15&t=180104
der daraus entstandenen "Scriptaufgabe" von eggy hier:
viewtopic.php?f=15&t=180104#p1262803,
und den Kommentaren anderer Teilnehmer:
Meillo hat geschrieben: ↑ zum Beitrag ↑
27.01.2021 12:12:17
Bitte einen Scripting-Contest starten! Ich bin auch dabei. :-)
starte ich hier mal den Versuch den Scripting Contest wieder zu beleben.

Die Aufgabenstellung von eggy:
ich hatte zuletzt die Situation, dass völlig überraschend einfach mal so der Jahreswechsel stattfand und ich, wie jedes Jahr, keinen aktuellen Papierkalender hatte. Das Problemchen (A4 landscape, 2x7 Felder pro Seite (mo-so), Datum incl. Wochentag, Kennzeichnung von Feiertagen (Bundesland abhängig) sowie Angabe der KW) ist inzwischen gelöst: Script macht Kalender-PDF. Mein Ansatz ist etwas, aka "mehr als", chaotisch und das Ergebnis noch weit davon entfernt perfekt zu sein. Mir reicht das jedoch so und wahrscheinlich werd ich frühestens 2022 wieder daran rumbasteln. Vermutlich dann, wenn ich, schon wieder, von nem plötzlich vor der Tür stehenenden Januar überrascht werde.
Ich hatte gehofft, dass es nen Generator gibt, wo man einfach den gewünschten Zeitraum und das Layout angibt, vielleicht noch ein zwei Farben dazunimmt, die Feiertage auswählt und ne Druckdatei rausfällt. Und hatte, bevor ich angefangen habe das Script zu erstellen, mal gesucht, was es an schönen Vorlagen gibt und nichts passendes gefunden. Keine Ahnung, ob ich falsch gesucht hab, meine Ansprüche zu ungewöhnlich sind oder wirklich niemand mehr schöne funktionale Papierkalender braucht (ok, schön ist meiner nun auch nicht geworden, funktioniert aber).
Es gibt ne Menge Ansätze wie man das Problemchen noch anders lösen könnte, von daher wäre das schon etwas wo sicherlich kreative und sehr unterschiedliche Lösungen bei entstehen, nur ist es vermutlich auch zu umfangreich für nen kleinen bis-zum-Wochenendeende-Scriptingcontest.
Da eggy und meine Wenigkeit schon "ein wenig" Vorsprung haben koennen wir den "Abgabetermin" auch gerne um einiges verlängern. (Vorschlaege sehr willkommen...)

In der Hoffnung um rege Teilnahme,
heinz

Benutzeravatar
heisenberg
Beiträge: 3473
Registriert: 04.06.2015 01:17:27
Lizenz eigener Beiträge: MIT Lizenz

Re: Scripting Contest

Beitrag von heisenberg » 03.02.2021 16:06:01

Könnt Ihr nicht pro Scripting Contest Aufgabe einen neuen Thread aufmachen? Ich finde diese Mega-Threads ziehmlich unangenehm zum nachvollziehen; d. h. da zig Unterseiten durchblättern zu müssen.

Also konkret bitte eine Thread aufmachen z. B. mit dem Titel:

Scripting Contest - Kalender zum Drucken
... unterhält sich hier gelegentlich mangels wunschgemäßer Gesprächspartner mal mit sich selbst.

eggy
Beiträge: 3331
Registriert: 10.05.2008 11:23:50

Re: Scripting Contest

Beitrag von eggy » 03.02.2021 16:26:43

Für den "endlos" Thread spricht: man abonniert den einmal und verpasst so keinen neuen tollen Contest, alles bleibt hübsch zusammen. (Eintragen im Wiki hat aufgrund mangelndes Interesses ja nicht funktioniert.)

@heisenberg: klick einfach auf die letzte Zahl der Seitenangaben

Antworten