[GELÖST] Drei Array-Inhalte pro Schleifendurchlauf anzeigen

Vom einfachen Programm zum fertigen Debian-Paket, Fragen rund um Programmiersprachen, Scripting und Lizenzierung.
eggy
Beiträge: 3331
Registriert: 10.05.2008 11:23:50

Re: [GELÖST] Drei Array-Inhalte pro Schleifendurchlauf anzeigen

Beitrag von eggy » 05.08.2021 17:14:23

Code: Alles auswählen

nl -s ": " -w $(($(w=$(seq 1 1000 | wc -l ); echo ${#w}) -1 ))  <(seq 1 1000 | sed 'n;n;s/$/\n/'|fmt | sed '/^$/d' ) 
Jetzt bleibt nur noch das Problem, wie erspart man sich an der Stelle das doppelte seq bzw. ls, ohne dessen Ausgabe auch temporär zwischen zu speichern.
Um die Länge von wc -l zu bekommen, wüsste ich jetzt auch nichts anderes als "w" mal kurz in ne Variable zu packen und ${#} zu nutzen, aber da das vernachlässigbar klein bleibt vermutlich egal. Oder gibt's da noch nen anderen bash-only-Weg, den ich grade überseh?

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

Re: [GELÖST] Drei Array-Inhalte pro Schleifendurchlauf anzeigen

Beitrag von Meillo » 05.08.2021 17:24:48

Es waere vielleicht einfacher, du wuerdest sowas verwenden:

Code: Alles auswählen

nl|sed 's/^ *//;s/\t/: /'
oder auch:

Code: Alles auswählen

nl|awk '{$1=$1":"}1'
;-)

... andererseits schaue ich dir auch gerne bei deinen Denkbemuehungen zu. :mrgreen:
Use ed once in a while!

JTH
Moderator
Beiträge: 3023
Registriert: 13.08.2008 17:01:41
Wohnort: Berlin

Re: [GELÖST] Drei Array-Inhalte pro Schleifendurchlauf anzeigen

Beitrag von JTH » 05.08.2021 17:44:12

Ich finde ja gerne Probleme – mit 9 Einträgen:

Code: Alles auswählen

~$ nl -s ": " -w $(($(w=$(seq 1 9 | wc -l ); echo ${#w}) -1 ))  <(seq 1 9 | sed 'n;n;s/$/\n/'|fmt | sed '/^$/d' ) 
nl: invalid line number field width: ‘0’: Numerical result out of range
Müsste das nicht auch eher

Code: Alles auswählen

-w $(w=$(($(seq 1 1000 | wc -l) / 3)); echo ${#w})
sein? Das ursprüngliche klappt nicht bei z.B. 99 Einträgen.

eggy hat geschrieben: ↑ zum Beitrag ↑
05.08.2021 17:14:23
Um die Länge von wc -l zu bekommen, wüsste ich jetzt auch nichts anderes als "w" mal kurz in ne Variable zu packen und ${#} zu nutzen, aber da das vernachlässigbar klein bleibt vermutlich egal. Oder gibt's da noch nen anderen bash-only-Weg, den ich grade überseh?
Die Anzahl nötiger Stellen für die Nummerierung finden, ist doch meist ein Problem, was man bei unbekannter Anzahl Elemente nur durch zweimal durchgehen finden kann.

Meillo hat geschrieben: ↑ zum Beitrag ↑
05.08.2021 14:07:33
Irgendwie soll das Script ja auch einen Sinn haben ... der sich mir bei 2000 Zeichen langen Zeilen irgendwie nicht mehr so ganz erschliesst.
Ich habe das Gefühl, von der ursprünglichen Frage hat sich das mit der investierten Zeit schon etwas entfernt ;)
Manchmal bekannt als Just (another) Terminal Hacker.

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

Re: [GELÖST] Drei Array-Inhalte pro Schleifendurchlauf anzeigen

Beitrag von eggy » 05.08.2021 17:51:50

@Meillo:
Nee, nee, das kann ja jeder. Und das mit dem Denken lassen wir mal lieber, dass geht nur nach hinten los.

Ich stell mich heute auch wirklich blöd an ... wc | wc ... awk | awk ... irgendwie drehen wir uns im Kreis :mrgreen:

Code: Alles auswählen

nl -s ": " -w $(($(seq 1 1000 | wc -l | wc -m) - 1)) <(seq 1 1000 | sed 'n;n;s/$/\n/'|fmt | sed '/^$/d' )
Bleibt aber immer noch: wie bekomm ich die seq Ausgabe zweimal in die Verarbeitung ohne das Zeug in ner Variable zu speichern ... parallel, tee, ... was gibt's in der Richtung denn noch so?

@JTH: der Thread ist doch schon längst gelöst, ab dann darf man doch auch OT rumblödeln, oder? Aber relevanter: für mich ist sowas immer ne gute Gelegenheit mal abwegige Sachen auszuprobieren, dabei lern ich meist Neues/Vergessenes. Solange da keine brauchbare Lösung steht, sollte das in dem Maße natürlich nicht sein, aber hier mit den fertigen Lösungen seh ich da kein Problem ... und ihr habt ja auch beide nen Rotstift am Hut, also notfalls einfach abtrennen und nach Smalltalk schubsen.

edit: JTHs Buchstabenzurückgedreht :oops:
Zuletzt geändert von eggy am 05.08.2021 18:31:14, insgesamt 2-mal geändert.

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

Re: [GELÖST] Drei Array-Inhalte pro Schleifendurchlauf anzeigen

Beitrag von Meillo » 05.08.2021 17:58:29

eggy hat geschrieben: ↑ zum Beitrag ↑
05.08.2021 17:51:50
... wc | wc ... awk | awk ... irgendwie drehen wir uns im Kreis :mrgreen:
Nee, das ist ein Zeichen fuer die vielfaeltige Nuetzlichkeit des jeweiligen Kommandos. ;-)
Bleibt aber immer noch: wie bekomm ich die seq Ausgabe zweimal in die Verarbeitung ohne das Zeug in ner Variable zu speichern
Gar nicht, weil man in Unix Pipelines nicht in mehrere Wege auspalten kann (ausser in Dateien abzweigen mit tee). Es ginge wohl nur mit hoeheren FDs und parallelen Prozessen, was aber eher gemogelt ist.

Ich wuerde den Output in eine Variable puffern und die dann zweimal verwenden. Das scheint mir dafuer die einfachste Loesung zu sein.
Use ed once in a while!

JTH
Moderator
Beiträge: 3023
Registriert: 13.08.2008 17:01:41
Wohnort: Berlin

Re: [GELÖST] Drei Array-Inhalte pro Schleifendurchlauf anzeigen

Beitrag von JTH » 05.08.2021 18:26:05

eggy hat geschrieben: ↑ zum Beitrag ↑
05.08.2021 17:51:50
@JHT: der Thread ist doch schon längst gelöst, ab dann darf man doch auch OT rumblödeln, oder? Aber relevanter: für mich ist sowas immer ne gute Gelegenheit mal abwegige Sachen auszuprobieren, dabei lern ich meist Neues/Vergessenes.
Klar klar, das war keine Kritik oder Moderation von mir, im Gegenteil. Letzteres geht mir genauso. Nur für den Buchstabendreher da oben muss ich einmal böse gucken.
Manchmal bekannt als Just (another) Terminal Hacker.

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

Re: [GELÖST] Drei Array-Inhalte pro Schleifendurchlauf anzeigen

Beitrag von eggy » 05.08.2021 18:37:43

@JTH: Hat ich auch nicht so verstanden. Und die Buchstaben sind auch schon wieder richtig gedreht... naja, bis zum nächsten Mal, ich kann mir die Reihenfolge in Deinem Nick einfach nicht merken, schon komisch :/

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

Re: [GELÖST] Drei Array-Inhalte pro Schleifendurchlauf anzeigen

Beitrag von Meillo » 05.08.2021 18:39:05

JTH hat geschrieben: ↑ zum Beitrag ↑
05.08.2021 18:26:05
Nur für den Buchstabendreher da oben muss ich einmal böse gucken.
Das hat eggy bestimmt absichtlich gemacht, um dich ein bisschen zu aergern. :twisted: Das liegt bestimmt daran, dass eggy sein Gehirn mit Nachdenken ueberanstrengt hat. :lol:

Ich finde, dass dieser Thread auch erst ab dem Zeitpunkt so richtig spannend geworden ist, nachdem das Ursprungsproblem geloest war ... und lustig ist er dann so richtig geworden, seit wir angefangen haben technisch rumzuspinnen. Ich bin also weiterhin gespannt, was eggys Nachdenkversuche noch so alles zu Tage befoerdern werden ... wobei mir sein Kopfweh schon leid tut. Also bitte nicht ueberanstrengen! ;-)

... wobei es vielleicht auch mal wieder an JTH laege, die naechste tolle Idee einzubringen ... darf ja jeder mal ein bisschen Kopfweh haben, dann ist's fuer keinen zu viel auf einmal. :-D
Use ed once in a while!

JTH
Moderator
Beiträge: 3023
Registriert: 13.08.2008 17:01:41
Wohnort: Berlin

Re: [GELÖST] Drei Array-Inhalte pro Schleifendurchlauf anzeigen

Beitrag von JTH » 05.08.2021 18:45:34

Meillo hat geschrieben: ↑ zum Beitrag ↑
05.08.2021 18:39:05
... wobei es vielleicht auch mal wieder an JTH laege, die naechste tolle Idee einzubringen ...
Ich versuche mich gerade an einer Variante mit zwei Named Pipes, um resourcensparend, ähem, das ls bzw. seq nur einmal auszuführen. Mit parallel fiel mir noch nichts direkt ein.

Danke für die Korrektur, egyg :wink:
Manchmal bekannt als Just (another) Terminal Hacker.

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

Re: [GELÖST] Drei Array-Inhalte pro Schleifendurchlauf anzeigen

Beitrag von eggy » 05.08.2021 18:48:44

ich hab grade

Code: Alles auswählen

parallel -i  sh -c "echo C{}; echo D{} {}" --  "a b"
in den fingern ... ich krieg aber "a" nicht durch seq ersetzt ... das Zeug ist schon komisch

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

Re: [GELÖST] Drei Array-Inhalte pro Schleifendurchlauf anzeigen

Beitrag von Meillo » 05.08.2021 20:55:23

eggy hat geschrieben: ↑ zum Beitrag ↑
05.08.2021 18:37:43
ich kann mir die Reihenfolge in Deinem Nick einfach nicht merken, schon komisch :/
Eselsbruecke: Just (another) Terminal Hacker. :THX:
Use ed once in a while!

JTH
Moderator
Beiträge: 3023
Registriert: 13.08.2008 17:01:41
Wohnort: Berlin

Re: [GELÖST] Drei Array-Inhalte pro Schleifendurchlauf anzeigen

Beitrag von JTH » 05.08.2021 21:47:05

Ha, das ist gut :lol:
Manchmal bekannt als Just (another) Terminal Hacker.

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

Re: [GELÖST] Drei Array-Inhalte pro Schleifendurchlauf anzeigen

Beitrag von Meillo » 05.08.2021 22:13:07

Neue Signatur? ;-)
Use ed once in a while!

BrotherJ
Beiträge: 323
Registriert: 15.11.2018 07:56:18

Re: [GELÖST] Drei Array-Inhalte pro Schleifendurchlauf anzeigen

Beitrag von BrotherJ » 08.08.2021 19:17:53

Besten Dank für die ganzen Denkanstöße. War richtig interessant das nachzuvollziehen.

Antworten