BASH: wie führen Sie arithmetische Operationen auf zahlen im Rohr
Ich bin immer ein Strom von zahlen, in einem Rohr, und möchte, um einige Operationen durchzuführen, bevor Sie zum nächsten Abschnitt, aber ich bin ein wenig verloren, wie würde ich es angehen, ohne das Rohr.
beispielsweise
> echo "1 2 3 4 5" | some command | cat
1 4 9 16 25
>
Haben Sie irgendwelche Ideen auf, wie man so etwas wie diese Arbeit? Die eigentliche operation, die ich durchführen will, ist einfach das hinzufügen zu jeder Zahl.
InformationsquelleAutor brice | 2010-07-17
Du musst angemeldet sein, um einen Kommentar abzugeben.
{} Erstellt eine Gruppierung. Sie könnte stattdessen erstellen Sie ein Skript für, dass.
Sie brauchen nicht eine subshell überhaupt. Ersetzen Sie Ihre nutzlos, hässlich und ineffizient subshell, die durch eine Gruppierung
{...}
.Für diejenigen, die verwirrt durch @gniourf_gniourf 's Kommentar, es angewendet, um die unbearbeitete Antwort, die bisher bearbeitet zu gehören
{}
Gruppierung.InformationsquelleAutor Matthew Flaschen
Ich würde schreiben:
Denke, wir können es als eine "Karte" (funktionale Programmierung). Es gibt viele Arten des Schreibens einem "map" - Funktion in der bash (mit stdin, Funktion args, ...), zum Beispiel:
InformationsquelleAutor tokland
.. Oder ..
Tatsächlich, jegliche shell-Befehle in eine pipe, werden automatisch die Ausführung in einer subshell; der einzige Grund, warum dies in
()
wäre die Gruppe es mit einem letztenecho
wie Matthew Flaschen habe, und selbst da könnte man genauso gut verwenden{}
(die Gruppierung, ohne dass eine subshell).InformationsquelleAutor lasseoe
InformationsquelleAutor aoakenfo
Oder Sie können über die Pipeline zum Ausdruck zu bc:
InformationsquelleAutor SiggyF
InformationsquelleAutor tilo
Verwendung von awk ist eine Recht kompakte Lösung
InformationsquelleAutor Niko
Wenn du lieber Python:
InformationsquelleAutor Amber
xargs, xargs, xargs
Oder gehen parallel:
Wäre viel einfacher, wenn Sie übergeben Sie Ihre Pfeife wie ein standard-set von args:
Oder auch:
Wirklich lohnt sich ein Blick auf die Beispiele im doc: https://www.gnu.org/software/parallel/man.html
InformationsquelleAutor Bluu
Yoi könnte, wie so etwas wie dieses:
oder auch wie dieser:
InformationsquelleAutor Aleks-Daniel Jakimenko-A.