awk, schneide Zeichen aus Teilstring aus

awk, schneide Zeichen aus Teilstring aus

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

verwandte Informationen