Вы можете сделать это напрямую с помощью awk:
$ awk '{gsub(/,/, "\t" $NF "\n");print}' input
В этом случае мы просто заменим запятую на вкладку, соединенную с последним полем (NF
хранит количество полей записи;$NF
получает NF
-ое поле) с новой строкой.Затем выведите результат.
Он также может быть решен с помощью sed аналогичным образом, но ИМХО, немного лучше, чем решение Джонатана (которое довольно сложное, я должен заметить).
sed -n '
:BEGIN
h
s/,.*<TAB>/<TAB>/
p
x
s/^[^,]*,//
t BEGIN' input
Здесь мы определяем метку в начале скрипта:
:BEGIN
Затем копируем содержимое пространства шаблона в пространство удержания:
h
Теперь мы заменяем все от первой запятой до вкладки только вкладкой:
s/,.*<TAB>/<TAB>/
Мы печатаем результат ...
p
... иполучить содержимое пространства удержания:
x
Поскольку мы напечатали первую строку - которая содержит первый шаблон GF:XXX
, за которым следует последний шаблон XXR
- мы удаляем первый шаблон GF:XXX
изстрока:
s/^[^,]*,//
Если выполняется замена, мы переходим к началу сценария:
t BEGIN
И все снова применяется к той же строке, за исключением того, что теперь эта строкабольше не имеет первого GF:XXX
шаблона.OTOH, если замена не сделана, то обработка текущей строки завершена, и мы больше не переходим к началу.