LINUX.ORG.RU

Как заменить поле в строке на результат выполнения команды над ним?

 , , ,


0

2

Что -то вроде

echo "148124520;foo;bar"|awk -F';' { print $(date -d @$1)";"$2";"$3 }'

Я могу порезать в цикле строки файла по полям, загнать их в переменные, совершить с ними что-то и распечатать. Есть ли менее порнографичный путь? Спасибо.

Применительно к awk, делаю strftime, как-то так:

{
        if ($1 ~ "^14.*") {
                $1=strftime("%F.%H:%M:%S", $1);
        }
        print $0;
}
pod ★★
()
Ответ на: комментарий от pod

Вот перл еще добрые люди подсуетили:

perl -lnpe 's/^(\d+)/localtime($1);/e'

rusya_rr
() автор топика

С gnu sed:

echo "148124520;foo;bar" | sed 'h; s/^[^;]*//; x; s/^\([^;]*\).*$/date -d @\1/e; G; s/\n//'


Можно переделать под более конкретную задачу быстренько.

P.S.: в авке можно разделитель полей для выхода задать, а не конкатенировать с ;.

evilface ★★
()
Ответ на: комментарий от evilface

Ну ты тоже молодец, конечно. Тебе тоже спасибо.

rusya_rr
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.