Suponho que seus arquivos tenham esse formato restrito, em que espaços separam colunas (não há espaço dentro de nenhum nome de usuário, etc.). Então isso deve funcionar (pelo menos no Linux, meu testbed é o Kubuntu):
while read date value number ; do printf "%s %s %s\n" "$date" "$value" "$(grep " $number" file2 | head -n 1 | cut -f 1 -d " ")" ; done <file1
Algumas explicações:
- O comando lê a partir de
file1
(… <file1
). - Contanto que possa ler uma linha (
while read …
)… - … imprime (
printf …
) com o terceiro campo substituído por… - … o efeito (
$( … )
) de…- … procurando por uma linha contendo o número fornecido dentro de
file2
(grep …
, observe o espaço inicial:" $number"
)… - … onde apenas a primeira correspondência é realizada (
head …
, apenas no caso),… - … e somente a primeira coluna é deixada (
cut …
).
- … procurando por uma linha contendo o número fornecido dentro de