Com awk
A tarefa aqui é simplesmente dividir cada valor por mil. Existem várias maneiras de fazer isso - em todos os valores em seu arquivo - com apenas um único comando. Suponha que seus números estejam em um arquivo chamado dalton.txt
e, como no exemplo mostrado, sejam um valor por linha. Aqui está uma maneira, usando o AWK:
awk '{ print $0 / 1000.0 }' dalton.txt
Isso opera em cada linha. $0
no AWK indica a linha inteira. Conforme escrito, o resultado é o seu terminal, mas você pode redirecionar a saída para um arquivo . Isso envia a saída para kilodalton.txt
(sobrescrevendo-a se já existir):
awk '{ print $0 / 1000.0 }' dalton.txt > kilodalton.txt
No entanto, você pode querer personalizar a precisão. Dado o exemplo de entrada que você nos mostrou, a saída para o seu terminal ou o arquivo usando esses comandos é:
12.3451
236.576
18.8654
45.6789
Como exemplo de saída, cada valor de saída mantém a mesma precisão (em termos do número de dígitos da informação mostrada) que o valor de entrada correspondente. Se você quiser isso:
awk '{ printf "%.*g\n", length($0), $0 / 1000.0 }' dalton.txt
Isso ainda trunca os zeros à direita após o ponto decimal, pois é assim que a função printf
g
especificador de formato se comporta. (Seus exemplos não deixam claro se você quiser isso.) O modo como funciona é simplesmente especificar uma precisão que seja sempre pelo menos tão alta quanto o número de dígitos na entrada, mas fazendo com que seja o comprimento total da linha de entrada. length($0)
.
Esse comando também pode ser redirecionado para um arquivo, e sua saída é exatamente a saída mostrada na sua pergunta:
12.34509
236.575665
18.86541
45.67887
Muitas vezes você pode querer especificar a mesma precisão para cada entrada, seja como o número total de figuras mostradas ou como o número de figuras mostradas após o ponto decimal. Por exemplo, para mostrar um total de 6 valores para cada valor (a primeira linha será 12.3451
), use:
awk '{ printf "%.6g\n", $0 / 1000.0 }' dalton.txt
Ou para mostrar 3 números após a casa decimal para cada valor (a primeira linha será 12.345
) use:
awk '{ printf "%.3f\n", $0 / 1000.0 }' dalton.txt
Embora seja possível escrever um loop em um script de shell que leia os dados, isso é mais complicado e raramente é a melhor abordagem quando um comando simples faz isso para você . Mesmo que isso já faça parte de um script de shell maior, os shells são idiomas de cola que devem ser usados para chamadas Quaisquer ferramentas são mais adequadas para uma tarefa. Por isso, sugiro usar esse método awk
, o excelente perl
method do terdon como.