Awk

awk,從子字元串中剪切字元

  • April 11, 2017

我有以下csv。我正在嘗試刪除 2017 年的 20 個,因此它的格式類似於 3717 或 31817。由於某些日期具有個位數的天數,因此位置總是不同的。由於年份總是 4 位數,我如何從第二列從右到左刪除 20?

12 32 **20** 17 EOD 交易 J 87.75 
12 323 **20** 17 EOD 交易 J 155 
45 330 **20** 17 EOD 交易 J 270 

預期產出

12 3217 EOD 交易 J 87.75 
12 32317 EOD 交易 J 155 
45 33017 EOD 交易 J 270

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)- 將擷取第二個欄位中的所有數字,除了末尾的第3位和第4位數字

將第二個欄位替換為以下結果:將第二個欄位中的第一個“20”替換為空字元串,然後列印結果行:

awk '{$2=gensub("20", "", 1, $2); print;}' input > output

引用自:https://unix.stackexchange.com/questions/358348