Sed 将数字四舍五入并分成两列

Sed 将数字四舍五入并分成两列,sed,grep,numbers,rounding,Sed,Grep,Numbers,Rounding,现在看来: xmin = 0 xmax = 15.393970521541949 xmin = 15.393970521541949 xmax = 27.58997052154195 xmin = 27.58997052154195 xmax = 46.05797052154195 xmin = 46.05797052154195 xmax = 65.67797052154194 xmin = 65.67797052154194 xmax = 81.08048969617173 xmin = 8

现在看来:

xmin = 0
xmax = 15.393970521541949
xmin = 15.393970521541949
xmax = 27.58997052154195
xmin = 27.58997052154195
xmax = 46.05797052154195
xmin = 46.05797052154195
xmax = 65.67797052154194
xmin = 65.67797052154194
xmax = 81.08048969617173
xmin = 81.08048969617173
xmax = 82.7959410430839
它应该是这样的:

0 15.39
15.39 27.59
27.59 46.06
46.06 65.68
     .
     . 
     .
嗨,我有一个.txt文件,从中我只过滤了这个xmin,xmax数字,命令是:

sed -n '16,$p' info.txt | grep "xmin\|xmax"

我知道如何只显示数字,但我不知道如何将这些数字四舍五入并将它们分成两列。结果应如示例所示。

awk可以轻松做到:

awk '{printf "%.2f%s",$3,!(NR%2)?"\n":FS}' file
以你的例子:

kent$  cat f
xmin = 0
xmax = 15.393970521541949
xmin = 15.393970521541949
xmax = 27.58997052154195
xmin = 27.58997052154195
xmax = 46.05797052154195
xmin = 46.05797052154195
xmax = 65.67797052154194
xmin = 65.67797052154194
xmax = 81.08048969617173
xmin = 81.08048969617173
xmax = 82.7959410430839

kent$  awk '{printf "%.2f%s",$3,!(NR%2)?"\n":FS}' f
0.00 15.39
15.39 27.59
27.59 46.06
46.06 65.68
65.68 81.08
81.08 82.80

awk可以轻松做到这一点:

awk '{printf "%.2f%s",$3,!(NR%2)?"\n":FS}' file
以你的例子:

kent$  cat f
xmin = 0
xmax = 15.393970521541949
xmin = 15.393970521541949
xmax = 27.58997052154195
xmin = 27.58997052154195
xmax = 46.05797052154195
xmin = 46.05797052154195
xmax = 65.67797052154194
xmin = 65.67797052154194
xmax = 81.08048969617173
xmin = 81.08048969617173
xmax = 82.7959410430839

kent$  awk '{printf "%.2f%s",$3,!(NR%2)?"\n":FS}' f
0.00 15.39
15.39 27.59
27.59 46.06
46.06 65.68
65.68 81.08
81.08 82.80
使用格式说明符(
%.2f
)打印每行中的最后一个字段(
$NF
)。每隔
一行后打印
换行符

    my $mi,$ma;
    while (<>) {
        if (/xmin = ([0-9.]*)/) { $mi=sprintf("%.2f", $1); next; };
        if (/xmax = ([0-9.]*)/) { $ma=sprintf("%.2f", $1); printf "$mi $ma\n" };
    }
使用格式说明符(
%.2f
)打印每行中的最后一个字段(
$NF
)。每
秒后打印
换行符

我的$mi,$ma;
    my $mi,$ma;
    while (<>) {
        if (/xmin = ([0-9.]*)/) { $mi=sprintf("%.2f", $1); next; };
        if (/xmax = ([0-9.]*)/) { $ma=sprintf("%.2f", $1); printf "$mi $ma\n" };
    }
而(){ 如果(/xmin=([0-9.]*)/){$mi=sprintf(“%.2f”,$1);下一步;}; 如果(/xmax=([0-9.]*)/){$ma=sprintf(“%.2f”,$1);printf“$mi$ma\n”}; }
使用以下命令运行此perl脚本:

    script.pl < data 
script.pl
会导致

0.00 15.39 15.39 27.59 27.59 46.06 46.06 65.68 65.68 81.08 81.08 82.80 0.00 15.39 15.39 27.59 27.59 46.06 46.06 65.68 65.68 81.08 81.08 82.80
my$mi$ma;
而(){
如果(/xmin=([0-9.]*)/){$mi=sprintf(“%.2f”,$1);下一步;};
如果(/xmax=([0-9.]*)/){$ma=sprintf(“%.2f”,$1);printf“$mi$ma\n”};
}
使用以下命令运行此perl脚本:

    script.pl < data 
script.pl
会导致

0.00 15.39 15.39 27.59 27.59 46.06 46.06 65.68 65.68 81.08 81.08 82.80 0.00 15.39 15.39 27.59 27.59 46.06 46.06 65.68 65.68 81.08 81.08 82.80
  • 读两行
  • 删除
    xman/xmin=
  • trunc数字
  • 将新行更改为空格
  • 循环
(POSIX版本so
——用于GNU sed的POSIX

  • 读两行
  • 删除
    xman/xmin=
  • trunc数字
  • 将新行更改为空格
  • 循环
(POSIX版本so
——用于GNU sed的POSIX