Assumindo que o GNU date
e bash
(ou qualquer shell que processe substituição com <(...)
) e que os dados sejam armazenados no arquivo file
, como nos primeiros dados de exemplo na pergunta:
$ paste -d ' ' <( date -f <( cut -d ' ' -f1-3 file | tr ' ' '-' ) +"%Y %j" ) \
<( cut -d ' ' -f4-5 file )
1980 001 0100 3.3
1982 101 0400 2.2
1985 338 0700 1.7
1995 365 1000 2.2
- O primeiro
cut
é usado junto com tr
para transformar as datas nas três primeiras colunas dos dados de entrada no formulário YYYY-MM-DD
.
- Isso é passado para o GNU
date
para processamento em lote por meio de sua opção -f
. Como saída, solicitamos datas usando o formato %Y %j
. %Y
é o ano no formulário YYYY
e %j
é o dia do ano no formulário DDD
.
- Isso é colado junto com as duas últimas colunas do arquivo original (produzido pelo segundo
cut
) usando um único espaço como um delimitador.
Esta é uma transformação direta dos dados originais para o resultado final, evitando a necessidade do arquivo de índice que você criou.