wake-up-neo.net

So entfernen Sie ein Zeichen am Ende jeder Zeile in Unix

Ich möchte das Komma , am Ende jeder Zeile in meiner Datei entfernen. Wie kann ich es anders als mit der Teilstringfunktion in awk tun? bitte schlage es mir vor. Danke

Probeneingang

        SUPPLIER_PROC_ID BIGINT NOT NULL,
        BTCH_NBR INTEGER NOT NULL,
        RX_BTCH_SUPPLIER_SEQ_NBR INTEGER NOT NULL,
        CORRN_ID INTEGER NOT NULL,
        RX_CNT BYTEINT NOT NULL,
        DATA_TYP_CD BYTEINT NOT NULL,
        DATA_PD_CD BYTEINT NOT NULL,
        CYC_DT DATE NOT NULL,
        BASE_DT DATE NOT NULL,
        DATA_LOAD_DT DATE NOT NULL,
        DATA_DT DATE NOT NULL,
        SUPPLIER_DATA_SRC_CD BYTEINT NOT NULL,
        RX_CHNL_CD BYTEINT NOT NULL,
        MP_IMS_ID INTEGER NOT NULL,
        MP_LOC_ID NUMERIC(3,0),
        MP_IMS_ID_ACTN_CD BYTEINT NOT NULL,
        NPI_ID BIGINT,
49
Teja

Sie können sed verwenden:

sed 's/,$//' file > file.nocomma

und das letzte Zeichen zu entfernen:

sed 's/.$//' file > file.nolast
47
jlliagre

Versuchen Sie folgendes:

awk '{print substr($0, 1, length($0)-1)}' file.txt

Dies ist allgemeiner als das Entfernen des letzten Kommas, sondern aller letzten Zeichen

Wenn Sie nur das letzte Komma mit awk entfernen möchten:

awk '{gsub(/,$/,""); print}' file.txt
74
Gilles Quenot

Ein awk Code basierend auf RS.

awk '1' RS=',\n' file

oder:

awk 'BEGIN{RS=",\n"}1' file

Das letzte Beispiel gilt für any char vor newline:

awk '1' RS='.\n' file

Note: Punkt. stimmt mit jedem Zeichen außer Zeilenumbrüche überein.

Erklärung

awk erlaubt uns die Verwendung anderer Trennzeichen (Zeilen) regex, wir müssen nur das Komma vor dem Zeilenumbruch (oder dot for any.) einfügen char) in der für input verwendeten, RS.

Note: Was bedeutet 1?

Kurze Antwort, Dies ist nur eine Abkürzung, um die Verwendung der Anweisung print zu vermeiden . In awk Wenn eine Bedingung erfüllt wird, besteht die Standardaktion darin, die Eingabezeile zu drucken. Beispiel:

$ echo "test" |awk '1'
test

Das liegt daran, dass 1 immer true ist, daher entspricht dieser Ausdruck:

$ echo "test"|awk '1==1'
test
$ echo "test"|awk '{if (1==1){print}}'
test

Dokumentation 

CheckRecord Splitting mit Standard awk und Output Separators .

6
klashxx

alternative Befehle, die denselben Job ausführen 

tr -d ",$" < infile
awk 'gsub(",$","")' infile
1
SHAILESH PATEL

Dieser Perl-Code entfernt Kommas am Zeilenende:

Perl -pe 's/,$//' file > file.nocomma

Diese Variante funktioniert immer noch, wenn nach dem Komma Leerzeichen stehen:

Perl -lpe 's/,\s*$//' file > file.nocomma

Diese Variante bearbeitet die Datei direkt vor Ort:

Perl -i -lpe 's/,\s*$//' file

Diese Variante bearbeitet die Datei direkt vor Ort und erstellt ein Backup file.bak:

Perl -i.bak -lpe 's/,\s*$//' file
0
Chris Koknat