o que é awk '{print $ 1 + 0.45 “” $ 2 “” $ 3}' file1 file2?

3

O que faz awk '{print $1+0.45 " " $2 " " $3 }' positionXYZ > positionX0.45YZ significar? Significa alterar uma linha no primeiro arquivo e colocar os novos dados no segundo?

    
por Meva 29.01.2014 / 22:49

2 respostas

9

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
    
por 29.01.2014 / 22:58
1

o arquivo2 tem 0,45 adicionado a cada valor da primeira coluna (os x'es), as colunas 2 e 3 são copiadas como estão, qualquer outra coisa na linha é ignorada.

o awk lê cada linha do arquivo1 e executa o script entre {}

O script é executado em todas as linhas, os campos delimitados com espaço em branco são atribuídos aos parâmetros posicionais $ 1, $ 2 $ 3, ...

Os parâmetros são impressos, exceto US $ 1 com 0.45

    
por 29.01.2014 / 22:58

Tags