Решение awk

Решение awk

У меня есть файл, полный текста, например:

CREATE TABLE `wild_adventure_game` (
  `game_instance_id` bigint(20) unsigned NOT NULL,
  `free_game_config_id` bigint(20) unsigned DEFAULT NULL,
  `respin_instance_id` bigint(20) DEFAULT NULL,
  `state` varchar(20) NOT NULL,
  `stake` decimal(11,2) NOT NULL,
  `pay_line_win` decimal(11,2) NOT NULL,
  `bonus_win` decimal(11,2) NOT NULL,
  `total_win` decimal(11,2) NOT NULL,
) ENGINE=InnoDB DEFAULT CHARSET=latin1

Иногда в конце строки, содержащей , есть запятая ENGINE, иногда нет. Я хочу заменить (т.е. удалить) эту запятую - моя первая наивная попытка была такой:

sed -e 's/'$) ENGINE/$) ENGINE/' < the_file

Это, конечно, не сработало, но можно ли sedкак-то так замутить, чтобы это можно было сделать? Или, если нет, то, возможно awk, ? В худшем случае я могу написать bash-скрипт, но это будет довольно коряво.

Редактировать

Вижу, что допустил опечатку выше. Должно было быть:

sed -e 's/,$) ENGINE/$) ENGINE/' < the_file

Итак, в этом примере я хочу заменить запятую в конце предпоследней строки ничем или, в более общем смысле, просто заменить некоторую подстроку в конце последней строки перед строкой, которая соответствует некоторому выражению. В моей неудачной попытке с sedя использовал $для представления конца строки, и я уже знал, что это не сработает, потому что sed читает строки одну за другой, а не через окончания строк; но это иллюстрирует то, чего я хотел бы добиться - и это может быть невозможно с sed.

решение1

Как насчет

sed '/ENGINE/ s/,$//' file

Для любой строки, котораясодержит«ДВИГАТЕЛЬ», удалить запятую в конце строки.

решение2

Решение awk

  /^) ENGINE/ {
    sub( /,$/, "" )
    print
    next
  }

  {
    print
  }

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