У меня есть следующий 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