Просто используйте инструмент, который позволяет редактировать на месте. Perl, например:
perl -i -F'\|' -lane 's/[ \t]+//g for @F; print lc("$F[0]|$F[1]$F[2]$F[3]|$F[4]")' a
-i
включает редактирование in-plcae, изменения применяются непосредственно к исходному файлу (другими словами, perl
имеет дело с созданием и удалением временный файл).
-a
включает автоматическое разделение символа, заданного -F
, поля сохраняются в массиве @F
.
s / [\ t] + // g
удаляет все пробелы и табуляции, а lc ()
переводит все в нижний регистр.
Конвейер cmd1 | cmd2
отправляет вывод первой команды на стандартный ввод второй. Кажется, вы хотите поместить вывод первой команды в командную строку второй. Способ сделать это — подстановка команды :$(command)
.
Это поместит вывод cmd1
в командную строку cmd2
:
cmd1 "$(cmd2)"
Или, в вашем случае:
date -d "$(echo... |cut)" +%s
Для удобочитаемости я бы по-прежнему использовал несколько строк:
datetime=$( echo "11-FEB-19 06.14.52.352000000 AM" | sed -e 's/\./:/g' -e 's/:[^:]\+$//' )
epoch=$( date -d "$datetime" +%s )
echo "$epoch"