усечение десятичных знаков в столбце - PullRequest
0 голосов
/ 14 декабря 2018

Как усечь десятичные знаки в столбце?Я хочу напечатать первый столбец, второй столбец, десятичные разряды которого будут обрезаны (не круглые) до 4 мест, а затем текст.Спасибо

Входной файл

56603.6153    2.212645
56603.6156    2.215645
56603.6158    2.210845
56603.6161    2.216175
56603.6166    2.204975
56603.6168    2.195275
56603.6171    2.219587
56603.6173    2.210778
56603.6176    2.199887

Я пробовал это

awk -F. '{print $1"."substr($1,5,4)"   " $2"."substr($2,1,4)}' file

вывод был:

56278.8   5545   2.5545 
56278.8   5549   2.5549 
56278.8   5554   2.5554 
56278.8   5559   2.5559   
56278.8   5563   2.5563    
56278.8   5568   2.5568  

Я хотел бы получить

56278.8554   2.5545   
56278.8555   2.5554    
56278.8555   2.5559     
56278.8556   2.5563    
56278.8556   2.5568   

Ответы [ 2 ]

0 голосов
/ 14 декабря 2018

Кроме того, всегда есть способ умножения на 10000-извлечение-целое-часть-деление-на-10000-и-печать-4-десятичных:

$ awk '{printf "%s %0.4f\n", $1, int($2*10000)/10000}' file
56603.6153 2.2126
56603.6156 2.2156
56603.6158 2.2108
56603.6161 2.2161
56603.6166 2.2049
56603.6168 2.1952
56603.6171 2.2195
56603.6173 2.2107
56603.6176 2.1998

Только не используйте его.

0 голосов
/ 14 декабря 2018

Тот факт, что ваш ожидаемый результат не совпадает с вашим примером ввода, означает, что мы не можем адекватно протестировать решение, но, возможно, это то, что вы хотите:

$ awk '
    { print t($1), t($2) }
    function t(n,  s) { s=index(n,"."); return (s ? substr(n,1,s+4) : n) }
' file
56603.6153 2.2126
56603.6156 2.2156
56603.6158 2.2108
56603.6161 2.2161
56603.6166 2.2049
56603.6168 2.1952
56603.6171 2.2195
56603.6173 2.2107
56603.6176 2.1998

Оберните возврат из t () вsprintf("%.04f",...) если вы хотите, чтобы все значения форматировались, а не просто усекались при необходимости, например:

function t(n,  s) { s=index(n,"."); return sprintf("%.04f",(s ? substr(n,1,s+4) : n)) }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...