Gibt es eine kürzere Schreibweise? Geben Sie grundsätzlich einen Befehl in eine Datei aus und verwenden Sie die Datei dann als Eingabe für den nächsten Befehl. Ich möchte auch die Datei behalten, um sie anschließend anzuzeigen.
cmd1 > verylong.txt; cmd2 < verylong.txt
Ich weiß, dass ich es kann
cmd1 | tee verylong.txt | cmd2
Da ich jedoch erwarte, dass "verylong.txt" eine riesige Datei ist, dachte ich, es wäre weniger effizient, Pipe zu verwenden, da dies die gesamte Datei im Speicher halten würde. Wenn ich dagegen eine Dateieingabe verwende, wird diese zeilenweise verarbeitet. (Oder ist meine Annahme falsch?)
Es wäre toll, wenn ich so etwas Elegantes machen könnte
cmd1 > verylong.txt > cmd2
quelle
sort
speichert nicht die gesamte Datei im Speicher, sondern verfügt über einen Puffer mit maximaler Größe und greift auf temporäre Dateien zurück, wenn dieses Maximum erreicht ist.Die bereits gegebene Antwort ist richtig. Aber wenn Ihr Ziel darin besteht, Ihr
verylongfile.txt
w / selektiv zu lesencmd2
,sed
könnte dies eine andere Option sein.sed
wirdw
alle seine Eingabe in den outfile Ritus, sondern nur die Bits, die nicht übereinstimmen/notinteresting/
Adresse an das Rohr. Oder Sie negieren die Aktion, mit/interesting/!d
der nur die Zeilen geschrieben werden, die derinteresting
Adresse der Pipe entsprechen.Wenn dies nicht Ihr Ziel ist, verwenden Sie es
tee
stattdessen - es ist ein effizienteres Werkzeug, um die gesamte Eingabe sowohl in die Outfile als auch in die Pipe zu schreiben.quelle
Es gibt einen cleveren Trick mit Tee und Subshells:
Ich habe das schon mal gemacht
pv
Sie erhalten einen Fortschrittsbalken, eine ETA und eine laufende Liniensumme. Dann wird source.lst an doSomething.sh und SomethingElse.sh (und auf verschiedenen CPUs!) Gefüttert. Schließlich erhalten wir eine MD5-Summe dieser riesigen Datei, nur für akademische Zwecke.quelle
Was ist los mit einfachen zweizeiligen Batch-Dateien? Mögen:
Oder
In beiden Fällen bleibt die Datei im Massenspeicher.
quelle
<
für das<
Symbol ...cmd | tee file | cmd
undcmd >file; cmd <file
besteht darin, dass die Befehle in der ersten Gruppe parallel ausgeführt werden - das heißt, dass sie alle gleichzeitig starten. Auf diese Weisecmd2
kann diecmd1
Ausgabe so verarbeitet werden, wie sie geschrieben wurde, währendcmd1; cmd2
zwei Befehle nacheinander ausgeführt werden - oder mit anderen Wortencmd2
warten müssen,cmd1
bis sie abgeschlossen sind, bevor etwas verarbeitet wird.