Löscht eine Spalte aus einer Datei mit Trennzeichen in Linux

7

Ich habe eine Datei im folgenden Format:

%Vor%

Ich möchte col3 (mit dem Delimiter "|") aus dem Header und den Daten löschen. Kann dies mit awk / sed gemacht werden?

Bitte beachten Sie, dass die Daten in Spalte 3 möglicherweise leer sind (Zeile 2).

Die Ausgabe sollte lauten:

%Vor%     
MyFirstName MyLastName 03.10.2012, 20:29
quelle

7 Antworten

17

Sie könnten einfach cut verwenden.

%Vor%     
tripleee 03.10.2012 20:49
quelle
3

Dies könnte für Sie funktionieren (GNU sed):

%Vor%     
potong 03.10.2012 22:28
quelle
1
%Vor%

sollte Ihnen die Ausgabe geben.

Es ist die sehr einfache awk-Verwendung.

Bearbeiten

Sie haben 70 Spalten nicht erwähnt ...: (

versuche das:

%Vor%     
Kent 03.10.2012 20:42
quelle
0

Hier ist eine mögliche Sed-Lösung:

%Vor%

Dies wird gut für Ihr Beispiel funktionieren und könnte für andere Beispiele angepasst werden, ist aber nicht wirklich eine allgemeine Lösung.

Erläuterung:

-i.bak Bearbeiten Sie die Datei an Ort und Stelle, zuerst eine Sicherung namens filename.bak .

\(^.*|.*|\) Passen Sie vom Anfang der Zeile bis einschließlich des zweiten Trennzeichens alles an. Die Klammern gruppieren diese Übereinstimmung (Gruppe 1).

.*| Alles bis einschließlich des letzten Trennzeichens abgleichen.

\(.*\) Finde den Rest und gruppiere (Gruppe 2).

Ersetzen Sie alle vorherigen Übereinstimmungen durch den Text aus Gruppe 1 und Gruppe 2.

    
Dean 03.10.2012 21:04
quelle
0

Die Verwendung von cut ist die richtige Antwort, aber wenn Sie awk wirklich verwenden möchten, ist es einfacher als Kent zeigt:

%Vor%

Mischen Sie einfach die Felder nach down, und ändern Sie dann den Wert von NF , um die Anzahl der Felder zu ändern.

    
Jonathan Wakely 03.10.2012 21:25
quelle
0

cut-Befehl wird dazu beitragen, dies zu erreichen

%Vor%     
minhas23 04.07.2014 11:49
quelle
0

Eine weitere awk Lösung könnte nützlich sein, wenn Sie viele Spalten haben

%Vor%     
discipulus 01.11.2016 08:40
quelle

Tags und Links