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 

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

  • Как я могу перечислить второе последнее слово, найденное в последовательности операторов в awk
  • Как удалить строки короче XY?
  • Поиск и замена нескольких строк в скрипте с помощью команд vim (поиск и замена) без sed?
  • Sed: изменить каждое повторение не первого слова для каждого слова в тексте
  • Извлечь текст, включая parens
  • Использование «%» в crontab
  •  12 3217 EODTRANSACTION J 87.75   
     12 32317 EODTRANSACTION J 155  
     45 33017 EODTRANSACTION J 270
    

  • Как рассчитать среднее количество столбцов по строкам, а также максимальное количество столбцов в файле в unix?
  • Необходимо проанализировать таблицу двойного входа с двумя парами
  • Экстра% в выходе скрипта awk
  • Что касается генерации пересечения и объединения двух CSV-файлов
  • Вложенный «awk» в цикле «while», проанализируйте два файла по строкам и сравните значения столбцов
  • Как добавить строку, начинающуюся с STDIN с отметкой времени в эпоху?
  • 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 - лучшая ОС в мире.