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

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

 12 32 20 17 EODTRANSACTION J 87.75   
 12 323 20 17 EODTRANSACTION J 155  
 45 330 20 17 EODTRANSACTION J 270 

Ожидаемый результат

 12 3217 EODTRANSACTION J 87.75   
 12 32317 EODTRANSACTION J 155  
 45 33017 EODTRANSACTION J 270

  • Как найти совпадения с sed (или аналогичными) для параметров конфигурации?
  • Unix ищет и удаляет переменную (содержит косую черту) из файла
  • Переформатирование отрицательных чисел с помощью sed или awk
  • sed работает при вводе из эха, но не из файла
  • Вывод процесса `find` обрабатывает определенные поля
  • Обрезать линии между двумя разделителями
  • Почему sed меняет разрешения файла на cifs, установленном share?
  • Заменяйте каждую вкладку ТОЛЬКО в начале каждой строки пробелами
  • 2 Solutions collect form web for “awk, вырезать символы из подстроки”

    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 
    Linux и Unix - лучшая ОС в мире.