A data do GNU tem uma opção -f
para converter datas lidas de um arquivo, linha por linha. Se o seu arquivo for longo, isso será mais rápido do que invocar date
uma vez por linha. A data precisa estar sozinha na linha; portanto, o plano é isolar a primeira coluna ( cut -d \; -f 1
), executá-la em date -f -
para realizar a conversão e cole o resultado com as colunas restantes.
paste -d \; <(<input cut -d \; -f 1 | date -f - +%s) <(<input cut -d \; -f 2-)
Isto assume que o seu shell suporta substituição de processos (ksh93, bash, zsh). Com sh
simples, em uma variante Unix que suporta /dev/fd
(a maioria faz), você pode usar o shuffling de descritores de arquivo:
<input cut -d \; -f 2- | {
exec 3<&0
<input cut -d \; -f 1 | date -f - +%s | paste -d \; - /dev/fd/3
}