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.