$ cut -d' ' -f 2- file2 | paste file1 -
O cut
removerá a primeira coluna de file2
( -f 2-
significa "campos de saída (colunas) 2 somente em diante"). O resultado disso será passado para paste
, que colocará o conteúdo de file1
na primeira coluna. O -
no comando paste
é um espaço reservado para o que é entregue na entrada padrão (o canal de cut
neste caso).
Passo a passo:
$ cut -d' ' -f 2- file2
10.2317 79.1638 6.0 26.7 20.9 0.8 14.0 98.6
10.2317 79.1638 5.6 26.5 20.8 1.9 13.6 98.0
10.2317 79.1638 7.5 27.7 20.8 0.1 15.8 96.4
10.2317 79.1638 8.1 26.0 19.6 0.0 15.5 94.1
$ cut -d' ' -f 2- file2 | paste file1 -
01/01/2007 10.2317 79.1638 6.0 26.7 20.9 0.8 14.0 98.6
02/01/2007 10.2317 79.1638 5.6 26.5 20.8 1.9 13.6 98.0
03/01/2007 10.2317 79.1638 7.5 27.7 20.8 0.1 15.8 96.4
04/01/2007 10.2317 79.1638 8.1 26.0 19.6 0.0 15.5 94.1
O comando cut
está esperando uma entrada delimitada por tabulação, mas, como copiei e colei da sua pergunta, ela é delimitada por espaço. Se os dados originais forem, na verdade, delimitados por tabulações, remova o comando -d' '
do comando cut
.
O comando paste
adicionará uma tabulação entre as colunas 1 e 2 por padrão. Se você quiser um espaço, use paste -d' ' file1 -
.
Em outra pergunta , foi perguntado como usar a data já existente em file2
aqui e acabar com o primeiro arquivo completamente.
$ paste <( date -f <( cut -d ' ' -f 1 file2 ) +"%d/%m/%Y" ) \
<( cut -d ' ' -f 2- file2 )
01/01/2007 10.2317 79.1638 6.0 26.7 20.9 0.8 14.0 98.6
02/01/2007 10.2317 79.1638 5.6 26.5 20.8 1.9 13.6 98.0
03/01/2007 10.2317 79.1638 7.5 27.7 20.8 0.1 15.8 96.4
04/01/2007 10.2317 79.1638 8.1 26.0 19.6 0.0 15.5 94.1
Note que isso requer um shell que entenda a substituição do processo ( <( ... )
), como bash
ou ksh
, e também requer a implementação do date
do GNU.
Um pouco de explicação pode estar em ordem:
A substituição do processo <( ... )
mais ou menos cria um arquivo temporário contendo a saída do comando dentro dos parênteses (na verdade, um FIFO em /dev/fd
). Então, todo o comando passará por duas etapas de substituição:
paste <( date -f output_of_cut1 +"%d/%m/%Y" ) \ output_from_cut2
date -f filename
lerá as datas no arquivo filename
e formatará cada uma delas de acordo com a string de formato indicada.
Então:
paste output_from_date output_from_cut2
que colará as colunas com a saída de date
como a primeira coluna e a saída do segundo cut
como as outras colunas.