2017-12-06 1 views
0

Wie bekomme ich jedes Feld der Join-Befehlsausgabe durch Tabs getrennt werden?Sortier- und Join-Datei in Bash (Skript)

+2

'X || Y' bedeutet 'tu Y nur, wenn X fehlschlägt'. Das willst du doch nicht? –

+3

Wenn Sie eine Datei 'x' an Ort und Stelle sortieren wollen, verwenden Sie' sort -o x x'; Dies ist sicher und überlagert die Eingabedatei nicht, bis die sortierten Daten geschrieben werden. Sie könnten dann 'sort -o annotation.txt annotation.txt; sort -o ausgabe2.txt ausgabe2.txt; Join output2.txt annotation.txt> outputtest.txt'. Wenn Sie der Meinung sind, dass Fehlermeldungen auftreten und Sie diese wirklich in der Ausgabedatei haben wollen, verwenden Sie '&>' statt nur '>'. Wenn Sie die Dateien nicht dauerhaft neu anordnen möchten, verwenden Sie [Prozesssubstitution] (https://www.gnu.org/software/bash/manual/bash.html#Process-Substitution), wie von Charles Duffy vorgeschlagen. –

+0

nop haha ​​Ich meine, tun X und Y und dann sie beide für Z –

Antwort

3

Dies ist ein Job für einen Prozess Substitution ist:

join <(sort annotation) <(sort output2.txt) >outputtest.txt 

In dieser Verwendung wird <(sort annotation) mit einem dateiähnliche Objekt (entweder /dev/fd/10 -Form oder einer Named Pipe) ersetzt werden, das, wenn von diesem gelesen enthält die Ausgabe des Befehls sort annotation. Daher wird join sortierte Eingabe sehen, ohne dass eine der Dateien direkt geändert werden muss (was der ursprüngliche Code nicht tat).

+0

Danke, das funktioniert! obwohl ich eine Frage habe, fusioniert es die erste Spalte, wenn es in beiden Dateien gleich ist? Gibt es da auch irgendwie, um ihm zu sagen, dass er die Ausgabe mit Tabs anzeigen soll, oder sollte ich danach einen anderen Befehl verwenden? –

+0

Ich möchte mehr über das Eingabeformat und Anwendungsfall wissen. Sie können '-t $ '\ t'' als Argument für' join' verwenden, um Tabs anzugeben, die sowohl für die Eingabe als auch für die Ausgabe verwendet werden. Wenn Sie die erste Spalte als Zusammenführungsfeld angeben möchten, macht '-j 1' dies explizit. –

+0

okay, ich werde meinen Beitrag bearbeiten! aber über die Verschmelzung Sache, Ich möchte nicht vor allem die ersten Spalten der Datei zusammenführen, aber wenn ich versuchte, die Befehlszeile, die Sie mir gab, hat es die ersten Spalten zusammengeführt (die BTW sind die gleichen in beiden Dateien) –