Ich möchte die gleichen Zeilen in 2 verschiedene Dateien drucken. Was ich gerade mache ist:
print ID[i]" "Value[i]" "TS1[i]" "TS2[i] > "file1.txt";
print ID[i]" "Value[i]" "TS1[i]" "TS2[i] > "file2.txt";
Kann ich einen einzelnen Befehl schreiben, um ihn in zwei verschiedene Dateien umzuleiten?
BEARBEITEN
Ich möchte nicht meine gesamte Befehlsausgabe in mehrere Dateien drucken, sondern einige Datensätze basierend auf bestimmten Bedingungen in mehrere Dateien schreiben. Ich drucke dies innerhalb eines awk
Skripts, daher benötige ich eine effiziente Methode, um dies zu tun.
text-processing
files
awk
Aashu
quelle
quelle
MYLINE=ID[i]" "...; print MYLINE >> file1.txt; print MYLINE >> file2.txt
?Antworten:
Sie können es nicht mit tun
awk
.Mit
tee
können Sie so etwas tun:Verwenden
tee -a
Sie diese Option, wenn Sie vorhandene Dateien anhängen möchten, anstatt sie zu überschreiben.Wenn Sie nicht die gesamte Ausgabe drucken möchten, können Sie Folgendes versuchen:
quelle
command = "tee file1.txt file2.txt"; print message | command;
awk
Anstatt zu einer Datei mitprint "text" > "file"
umzuleiten, können Sie innerhalb zu einem Befehl umleiten, indem Sie:Wenn Sie das zum ersten Mal verwenden,
|
wirdawk
der Befehl erzeugt und beim nächsten Mal wird derselbe Befehl erneut verwendet, sodass nichttee
jedes Mal ein neuer Befehl gestartet wird und die Dateien nicht überschrieben werden (Sie müssen aufrufen,close("tee file1.txt file2.txt")
wenn Sie möchtenawk
um beim nächsten Mal einen neuen Befehl zu starten). Wenn Sie beide jedoch tun> "file1.txt"
und| "tee file1.txt..."
es wird ein Konflikt.Möglicherweise möchten Sie dann
>> "file1.txt"
und| "tee -a file1.txt..."
stattdessen verwenden.Ich würde jedoch immer noch den
for
Ansatz von @ cuonglm wählen oder eineawk
Funktion verwenden, da diese sauberer und effizienter wäre.quelle
awk
Script verwendet, nicht in Shell wie meine Antwort. Siehe: gnu.org/software/gawk/manual/html_node/Redirection.htmlEine benutzerdefinierte Funktion kann Ihren Code sauberer machen und weniger Doppelarbeit verursachen, wenn dies der Fall ist.
Oder codieren Sie die Dateien hart, wenn das alles ist, was Sie brauchen.
quelle
Sie können dies mit tun
sed
- aber ohne eine klarere Vorstellung von Ihrer Eingabe weiß ich nicht, wie ich sie konkret demonstrieren soll. Dennoch ist hier ein allgemeines Beispiel:Das schreibt nur die Zeilen mit a
1
anonesfile.txt
und sonst für3
- alles andere wird gelöscht. Dies ist ein sehr einfaches Beispiel dafür, wie dies funktionieren könnte, aber wenn Sie Beispiel-Input liefern könnten, könnte ich es etwas besser machen.Sobald
sed
eine Datei zum Schreiben geöffnet wird, bleibt sie geöffnet, bis der Prozess abgeschlossen ist. Die eigenen Schreibvorgänge werden nicht kontinuierlich abgeschnitten. Die Dateideskriptoren bleiben während der gesamten Laufzeit des Prozesses erhalten.quelle