awk、部分文字列から文字を切り取る

awk、部分文字列から文字を切り取る

次の 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

関連情報