awk, вырезать символы из подстроки

awk, вырезать символы из подстроки

У меня есть следующий csv. Я пытаюсь удалить 20 из 2017 года, поэтому он отформатирован как 3717 или 31817. Позиции всегда разные из-за того, что некоторые даты имеют однозначные дни. Поскольку год всегда состоит из 4 цифр, как я могу удалить 20 из второго столбца, идя справа налево?

12 322017 EODTRANSACTION 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)- захватит все цифры из второго поля, кроме3й и4th цифра в конце

решение2

Замените второе поле результатом: замените первое «20» во втором поле пустой строкой, затем выведите полученную строку:

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

Связанный контент