次の CSV があります。2017 から 20 を削除して、3717 または 31817 のような形式にしようとしています。日付によっては 1 桁の日数があるため、位置は常に異なります。年は常に 4 桁なので、右から左に向かって 2 列目から 20 を削除するにはどうすればよいでしょうか。
12 322017 EODトランザクション J 87.75 12 3232017 EODトランザクション J 155 45 3302017 EODトランザクション J 270
期待される出力
12 3217 EODトランザクション J 87.75 12 32317 EODトランザクション J 155 45 33017 EODトランザクション J 270
答え1
awkアプローチ:
awk '{match($2, /^([0-9]+)[0-9]{2}([0-9]{2})$/, a); $2=a[1]a[2]}1' file
出力:
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)
- 2番目のフィールドから、3rdと4末尾の数字
答え2
2 番目のフィールドを次の結果に置き換えます。2 番目のフィールドの最初の「20」を空の文字列に置き換え、結果の行を出力します。
awk '{$2=gensub("20", "", 1, $2); print;}' input > output