Ich habe die folgende CSV-Datei. Ich versuche, die 20 aus 2017 zu entfernen, damit es als 3717 oder 31817 formatiert wird. Die Positionen sind immer unterschiedlich, da einige Daten einstellige Tage haben. Da das Jahr immer 4-stellig ist, wie kann ich die 20 aus der zweiten Spalte von rechts nach links entfernen?
12 322017 EOD-TRANSAKTION J 87,75 12 3232017 EODTRANSAKTION J 155 45 3302017 EODTRANSAKTION J 270
Erwartete Ausgabe
12 3217 EODTRANSAKTION J 87,75 12 32317 EOD-TRANSAKTION J 155 45 33017 EODTRANSAKTION J 270
Antwort1
awkAnsatz:
awk '{match($2, /^([0-9]+)[0-9]{2}([0-9]{2})$/, a); $2=a[1]a[2]}1' file
Die Ausgabe:
12 3217 EODTRANSACTION J 87.75
12 32317 EODTRANSACTION J 155
45 33017 EODTRANSACTION J 270
match($2, /^([0-9]+)[0-9]{2}([0-9]{2})$/, a)
- erfasst alle Ziffern aus dem zweiten Feld außer der3rd und4te Ziffer am Ende
Antwort2
Ersetzen Sie das zweite Feld durch das Ergebnis von: Ersetzen Sie die erste „20“ im zweiten Feld durch die leere Zeichenfolge und drucken Sie anschließend die resultierende Zeile:
awk '{$2=gensub("20", "", 1, $2); print;}' input > output