Vamos quebrar isso. awk '{foo}' file
aplicará a expressão foo
a cada linha de file
e imprimirá o resultado no terminal (saída padrão). awk
divide suas linhas de entrada no espaço em branco (por padrão) e salva cada campo como $1
, $2
etc.
Assim, a expressão real que você está executando significa: leia cada linha de entrada, adicione 0,45 ao valor do primeiro campo e depois imprima esse campo, assim como o segundo e o terceiro. Isso é mais facilmente explicado com um exemplo simples:
$ cat file.txt
10 20 30 40
50 60 70 80
$ awk '{print $1+0.45 " " $2 " " $3 }' file.txt
10.45 20 30
50.45 60 70
Portanto, como você pode ver, o script awk
adicionou 0,45 ao primeiro campo de cada linha e depois imprimiu junto com o segundo e o terceiro. O quarto foi ignorado desde que você não disse para imprimir $4
.
O próximo bit não tem nada a ver com awk
, o símbolo >
é para redirecionamento de saída e é usado pelo shell (bash ou zsh ou o que você estiver usando). Em geral, command > file
salvará a saída de command
no arquivo file
sobrescrevendo o conteúdo do arquivo se ele existir e criando-o se não existir.
Colocando tudo junto:
$ ls
file.txt
$ cat file.txt
10 20 30 40
50 60 70 80
$ awk '{print $1+0.45 " " $2 " " $3 }' file.txt > file2.txt
$ ls
file2.txt file.txt
$ cat file2.txt
10.45 20 30
50.45 60 70