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,
Sie können sed verwenden:
sed 's/,$//' file > file.nocomma
und das letzte Zeichen zu entfernen:
sed 's/.$//' file > file.nolast
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
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 .
alternative Befehle, die denselben Job ausführen
tr -d ",$" < infile
awk 'gsub(",$","")' infile
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