Entfernen von allem in einer Spalte nach einem bestimmten eingebetteten Zeichen in einer CSV-Datei

Entfernen von allem in einer Spalte nach einem bestimmten eingebetteten Zeichen in einer CSV-Datei

Ich muss alle Inhalte entfernen, die in einer Spalte nach einem bestimmten Zeichen in der CSV-Datei erscheinen. Dies ist das aktuelle Format:

2020-01-01T12:00:00,Transaction Description,Initiator,$00.00

Ich möchte den Inhalt der ersten Spalte, der nach T erscheint, entfernen, sodass es folgendermaßen aussieht:

2020-01-01,Transaction Description,Initiator,$00.00

Ich habe sed ausprobiert, aber es hat nicht wie erwartet funktioniert.

Antwort1

Die Verwendung von Standard sedin ähnlicher Weise wieTimur verwendet Perl:

$ sed 's/T[^,]*//' file
2020-01-01,Transaction Description,Initiator,$00.00

Dadurch wird der gesamte Text ab der ersten TZeile jeder Zeile durch eine Ersetzung bis zum ersten Komma (dieses jedoch nicht eingeschlossen) entfernt.

Um das Ergebnis zu speichern, leiten Sie es zu einer neuen Datei weiter.

Antwort2

Verwenden Sie diesen Perl-Einzeiler:

perl -pe 's{T[^,]*}{}' input_file > output_file

Hier
-eweist das Befehlszeilenflag Perl an, den in der Zeile folgenden Code zu verwenden, anstatt im angegebenen Skript nach Code zu suchen.
-pEs weist Perl an, die Eingabe Zeile für Zeile zu durchlaufen und sie nach der Ausführung des angegebenen Codes auszudrucken.
s{T[^,]*}{}Es ersetzt Tgefolgt von beliebigen Zeichen außer ,null oder mehrmals ( *gibt gierige oder längste Übereinstimmung an). Dies „frisst“ die Zeichen auf, beginnend mit dem ersten T (einschließlich) und endend mit dem ersten folgenden Komma (ausschließlich).

Antwort3

Methode 1:

awk -F "," 'OFS=","{gsub(/T.*/,"",$1);print $0}' filename

Ausgabe

2020-01-01,Transaction Description,Initiator,$00.00

Befehl2

perl -pne "s/,/\n/g" filenmame| sed '/.T/s/T.*//g'|perl -pne "s/\n/,/g"| sed "s/,$//g"

Ausgabe

2020-01-01,Transaction Description,Initiator,$00.00

Methode 3

#!/usr/bin/python
import re
p=re.compile(r'T.*')
k=open('p.txt','r')
for i in k:
    l=i.split(",")
    z=re.sub(p,"",l[0])
    rt=",".join(l[1:])
    er=",{0}".format(rt)
    print z+er,

Ausgabe

2020-01-01,Transaction Description,Initiator,$00.00

verwandte Informationen