du tust es einfach
seq 1 n | xargs -n 5 echo
n ist die Nummer, die Sie erreichen möchten
Wenn Ihr Betriebssystem bash, aber nicht seq hat, ist hier eine Alternative (danke an @cuonglm und @jimmyj für ihre Bemerkungen)
echo {1..n} | xargs -n5
( Je nach Betriebssystem und Bash-Version müssen Sie möglicherweise vorsichtig sein, wenn Sie mit diesem eine sehr hohe Zahl erreichen, und wenn Bash tatsächlich zuerst versucht hat, zu expandieren, oder wenn dies der Fall ist, ist es klug genug, nach und nach zu füttern, ohne zu versuchen, das Ganze zu passen 1..n als String im Speicher und füttere das Echo ...)
Und dank cuonglm und StephaneChazelas füge ich eine Alternative hinzu, die sehr, sehr wenig CPU-schwer ist als meine erste xargs-Lösung (bei der xargs alle 5 Zahlen / bin / echo aufruft, anstatt die integrierte Shell verwenden zu können) (es ist) wahrscheinlich ähnlich dem zweiten, bei dem xargs kein Echo aufruft):
printf '%s %s %s %s %s\n' {1..n}
Diese 2. und 3. Lösung unterscheiden sich von der 1. darin, dass die Shell zuerst 1..n erweitern muss, bevor printf (oder xargs) mit dem Drucken beginnen kann, wenn ich mich nicht irre ... also beginnt sie später (insbesondere wenn n ist) groß) ... und könnte einige Grenzen erreichen (Zeilenlänge oder Speicher, abhängig von der Implementierung und dem Betriebssystem), wenn n sehr groß ist.
1
inseq 1 15
ist nicht wirklich notwendig.echo
ist auch nicht notwendig.echo {1..100} | xargs -n5
seq
ist nur auf dem GNU-System. Sie könnenbash
auf anderen * nix haben.Rein
coreutils
:Pure Perl:
GNU grep (schamlos von @ 1_CR gestohlen ):
Wenn es Ihnen nichts ausmacht, Nullen zu führen:
Und wenn Sie dies tun:
Jede dieser Funktionen kann zu einer Funktion gemacht werden, die eine Zahl als Eingabe verwendet und die entsprechende Liste druckt. Zum Beispiel,
Sie können dann laufen
quelle
~/.bashrc
wenn Sie bash ausführen), damit sie allen Terminals zur Verfügung stehen. Dies$1
ist einfach das erste Argument für die Funktion. Weitere Details finden Sie hier .echo -e "\n"{1..100} | column -c40 -x
Mit
printf
und Klammererweiterung :quelle
Mit
zsh
:(Letzteres funktioniert auch in neueren Versionen von ksh93 oder bash).
quelle
mit Schleife:
Ausgabe:
quelle
if ! ((x%5)); then echo
oderif ((x%5 == 0)); then echo
[ $(($x%5)) -eq 0 ]
ist unnötig ausführlich.Mit
awk
kann man sagen:Es gibt zurück:
Grundsätzlich wird das Trennzeichen für Ausgabedatensätze (Zeilentrennzeichen) entweder durch ein Feldtrennzeichen (Leerzeichen als Standard) oder durch ein Datensatztrennzeichen (neue Zeile als Standard) geändert. Wenn also die Anzahl der Zeilen ein Vielfaches von ist
5
, wird eine neue Zeile hinzugefügt. sonst ein Leerzeichen.Ich habe eine breitere Erklärung in einer ähnlichen Frage geschrieben: bash / sed / awk / etc entferne jede andere neue Zeile .
quelle
Sie können verwendet werden
seq
,tr
undsed
:Oder als optimierte Kombination der Antworten von Olivier, Benoit und mir (in seinen Kommentaren):
quelle
tr
, verwenden Sieseq -s" " 15
stattdessen.Alle eleganten Lösungen wurden getroffen ... also mit GNU
awk
undbash
oder mit GNU
grep
quelle