Anfügen einer Spalte

Anfügen einer Spalte

Ich habe hier und an einigen anderen Orten nach einer Antwort gesucht, aber es scheint so unglaublich einfach, dass niemand darauf geantwortet hat. Ich muss lediglich einen einzelnen Wert in einer neuen Spalte am Ende jeder Zeile hinzufügen. Das Nächstliegende, was ich gefunden habe, ist die Verwendung von , sed -i "s/$/green/" ./test.txtaber dies fügt den Wert „green“ zur nächsten Zeile hinzu. Ich muss ihn als neue Spalte nach der aktuellen letzten Spalte hinzufügen.

Ich habe eine Datei wie diese:

chr -   xyz ordered_A01 5480    6144
chr -   xyz ordered_A01 5480    58001

Es muss für mich so aussehen:

chr -   xyz ordered_A01 5480    6144    green
chr -   xyz ordered_A01 5480    58001   green

Aber stattdessen bekomme ich Folgendes:

chr -   xyz ordered_A01 5480    6144
green
chr -   xyz ordered_A01 5480    5801
green

Antwort1

Der sed-Befehl in Ihrer Frage ist tatsächlich korrekt. Wenn Sie das Ergebnis in einer neuen Zeile sehen, ist Ihr Terminal entweder auf „Narrow“ eingestellt und Sie sehen nur „Wrap“ oder Ihre tatsächliche Umgebung enthält Code, den Sie uns in diesem Beispiel nicht zeigen. Es funktioniert so, wie es ist, aber es gibt zwei Probleme, die Sie kennen sollten:

  1. Die Verwendung $als Teil Ihres Ausdrucks innerhalb einer Zeichenfolge in doppelten Anführungszeichen ist gefährlich. Normalerweise würde dies als Bash-Variable erweitert. In diesem Fall sind Sie damit durchgekommen, da das /Zeichen danach kein gültiger wertvoller Name ist. Um dies zu vermeiden, hätten Sie Ihren Ausdruck jedoch wirklich in einfache Anführungszeichen setzen sollen.

  2. Wenn Sie die Elemente als Spalten ausrichten möchten, sollten Sie wahrscheinlich eine Art Trennzeichen zwischen dem Zeilenende und dem Wert einfügen, den Sie hinzufügen. Ein Tabulator ist hierfür möglicherweise die einfachste Möglichkeit, aber Sie sollten wahrscheinlich das Trennzeichen verwenden, das Sie bereits zwischen anderen Feldern haben.

Zusammengefasst könnte der korrigierte Befehl etwa so aussehen:

sed -i 's/$/\tgreen/' ./test.txt

Wenn die Ergebnisse nicht wie gewünscht ausgerichtet sind, können Sie die Daten durchleiten, colum die Spalten auszurichten.

Was die Dinge angeht, die Sie uns nicht zeigen, liegt das Problem wahrscheinlich in Ihrer Datendatei. Da Sie Wordpad und Excel in einem Kommentar erwähnen, nehme ich an, dass Sie eine gemischte Windows/Unix-Umgebung haben. Ich vermute, das Problem liegt darin, dass Ihre Datendatei vor dem Ende Ihrer Zeilen nicht druckbare Müllsequenzen enthält. Sie sollten etwas tun, um das zu bereinigen. Ein einfacher sed 's/\s*$//'Ansatz wäre vielleicht (Entfernen aller Leerzeichen am Ende der Zeile außer dem letzten Zeilenumbruch), aber ein fortgeschritteneres System wie ein Dos2Unix-Konverter könnte Ihnen bessere Ergebnisse liefern. Wenn Sie dort binären Müll haben und die Datei ASCI-Text sein soll, könnten Sie versuchen, alles außerhalb des Bereichs mit zu löschen tr -cd '\11\12\15\40-\176'.

Antwort2

Du könntest benutzen awk:

awk '{printf "%s", $0 "\tgreen\n"}' infile > outfile

Antwort3

Sie können Vim im Ex-Modus verwenden:

ex -sc '%s/$/\tgreen/|x' test.txt
  1. %Alle Zeilen auswählen

  2. \tTab

  3. xspeichern und schließen

verwandte Informationen