标签: numeric-data

将 bash 中的数字输出格式化为精确到小数点后 4 位

我有一个将数字输出到日志文件的命令,我不喜欢数字更改小数位数时的外观,因为它破坏了对齐方式并使一切看起来很混乱。如何强制输出每次都具有相同的小数位数?

前任:

531.125
531.4561
531.3518
531.2
Run Code Online (Sandbox Code Playgroud)

应该:

531.1250
531.4561
531.3518
531.2000
Run Code Online (Sandbox Code Playgroud)

谢谢!

bash numeric-data printf

4
推荐指数
1
解决办法
1万
查看次数

mit-scheme 中的不准确乘法

我发现 mit-scheme 中的浮点乘法不准确,例如,

1 ]=> (* 1991.0 0.1)
Run Code Online (Sandbox Code Playgroud)

会产生

;Value: 199.10000000000002
Run Code Online (Sandbox Code Playgroud)

你能帮忙解释一下奇怪的尾随数字“2”的出现吗?

numeric-data lisp

4
推荐指数
2
解决办法
360
查看次数

将文本文件中的十进制值列表转换为十六进制格式

我需要将文本文件中的十进制值列表转换为十六进制格式,例如 test.txt 可能包含:

131072
196608
262144
327680
393216
...
Run Code Online (Sandbox Code Playgroud)

输出应该是十六进制值列表(十六进制 8 位,带前导零):

00020000
00030000
00040000
...
Run Code Online (Sandbox Code Playgroud)

输出被打印到文本文件中。如何使用 python 或 linux shell 脚本来做这个?

编辑#1

我错过了一个额外的操作:我需要80000000为每个创建的十六进制值添加十六进制。(算术加法,适用于已创建的十六进制值列表)。

linux scripting python conversion numeric-data

4
推荐指数
3
解决办法
5010
查看次数

如何从文件中提取和剪切数字并将它们相加

我有一个日志文件。对于具有特定数字的每一行,我想对这些行的最后一个数字求和。grep 和 cut 没问题,但我不知道如何对数字求和。我尝试了 StackExchange 的一些解决方案,但没有让它们在我的情况下工作。

这是我到目前为止:

grep "30201" logfile.txt | cut -f6 -d "|"
Run Code Online (Sandbox Code Playgroud)

30201 是我正在寻找的线路。

我想对最后的数字 650、1389 和 945 求和

日志文件.txt

Jan 09 2016|09:15:17|30201|1|SL02|650
Jan 09 2016|09:15:18|43097|1|SL01|945
Jan 09 2016|09:15:19|28774|2|SB03|1389
Jan 09 2016|09:16:21|00788|1|SL02|650
Jan 09 2016|09:17:25|03361|3|SL01|945
Jan 09 2016|09:17:33|08385|1|SL02|650
Jan 09 2016|09:18:43|10234|1|SL01|945
Jan 09 2016|09:21:55|00788|1|SL02|650
Jan 09 2016|09:24:43|03361|3|SB03|1389
Jan 09 2016|09:26:01|30201|1|SB03|1389
Jan 09 2016|09:26:21|28774|2|SL02|650
Jan 09 2016|09:26:25|00788|1|SL02|650
Jan 09 2016|09:27:21|28774|2|SL02|650
Jan 09 2016|09:29:32|30201|1|SL01|945
Jan 09 2016|09:30:12|34032|1|SB03|1389
Jan 09 2016|09:30:15|08767|3|SL02|650
Run Code Online (Sandbox Code Playgroud)

grep logs text-processing cut numeric-data

4
推荐指数
1
解决办法
3366
查看次数

使用 sed 打印所有没有数字的行

我需要在 sed 中使用正则表达式打印所有包含非数字字符的行。输入是一个 csv,其中一些行包含文本和数字。我只对打印没有数字的那些感兴趣。这是我尝试过的:

sed -E -n '/^\D*$/p' direcciones.csv
Run Code Online (Sandbox Code Playgroud)

为什么它没有找到任何东西?

sed numeric-data

4
推荐指数
3
解决办法
1186
查看次数

如何调整一行中的第n个数字?

文件内容:

RANDOM TEXT    num1=400    num2=15    RANDOM TEXT
RANDOM TEXT    num1=300    num2=10    RANDOM TEXT
RANDOM TEXT    num1=200    num2=5    RANDOM TEXT
Run Code Online (Sandbox Code Playgroud)

我想为每行的每个 num2 减去 5,如下所示:

RANDOM TEXT    num1=400    num2=10    RANDOM TEXT
RANDOM TEXT    num1=300    num2=5    RANDOM TEXT
RANDOM TEXT    num1=200    num2=0    RANDOM TEXT
Run Code Online (Sandbox Code Playgroud)

纯 bash 是首选,但如果另一个 GNU 工具做得更好,那也没什么大不了的。

command-line text-processing regular-expression numeric-data

4
推荐指数
2
解决办法
347
查看次数

awk 的数字格式和舍入问题

当我试图找到一列值的平均值时,我想得到确切的数字。

例如,这是输入值列:

1426044
1425486
1439480
1423677
1383676
1360088
1390745
1435123
1422970
1394461
1325896
1251248
1206005
1217057
1168298
1153022
1199310
1250162
1247917
1206836
Run Code Online (Sandbox Code Playgroud)

当我使用以下命令时:

... | awk '{ sum+=$1} END { print sum/NR}'
Run Code Online (Sandbox Code Playgroud)

我得到以下的输出:1.31638e+06。但是,我想要1316375.05这种格式的确切数字,甚至更好 1,316,375.05

如何仅使用命令行工具执行此操作?

编辑 1

我发现了以下单行 awk 命令,它将为我提供最大值、最小值和平均值:

awk 'NR == 1 { max=$1; min=$1; sum=0 } { if ($1>max) max=$1; if ($1<min) min=$1; sum+=$1;} END {printf "Min: %d\tMax: %d\tAverage: %.2f\n", min, max, sum/NR}'
Run Code Online (Sandbox Code Playgroud)

为什么NR必须初始化为1?当我删除时NR == 1,我得到了错误的结果。

编辑 2

我从有没有办法在单个命令中获取数字列表的最小值、最大值、中值和平均值中找到以下 …

command-line awk numeric-data mawk text-formatting

4
推荐指数
2
解决办法
776
查看次数

使用 awk 单独对文件中的每一列进行数字排序

我正在尝试对一个非常大的文件中的每一列进行数字排序。我需要命令速度很快,所以我尝试在 awk 命令中执行此操作。

示例输入:

1,4,2,7,4
9,2,1,1,1
3,9,9,2,2
5,7,7,8,8
Run Code Online (Sandbox Code Playgroud)

示例输出:

1,2,1,1,1
3,4,2,2,2
5,7,7,7,4
9,9,9,8,8
Run Code Online (Sandbox Code Playgroud)

我做了一些可以完成这项工作的东西(但它不是我需要的强大的 awk 命令):

for i in $(seq $NumberOfColumns); do 
  SortedMatrix=$(paste <(echo "$SortedMatrix") <(awk -F ',' -v x=$i '{print $x}' File | sort -nr) -d ,)
done
Run Code Online (Sandbox Code Playgroud)

但它很慢!
我试过在 awk 中做到这一点,我想我很接近:

SortedMatrix=$(awk -F ',' 'NR==FNR {for (i=1;i<=NF;i++) print|"sort -nr"}' File)
Run Code Online (Sandbox Code Playgroud)

但它不输出列(只是一个很长的列),我明白为什么这样做但我不知道如何解决它,我想在 awk 中使用 paste 但我不知道如何实现它。

有谁知道如何在 awk 中做到这一点?任何帮助或指导将不胜感激

awk text-processing numeric-data

4
推荐指数
1
解决办法
192
查看次数

从字符串中提取正/负浮点数

我试图从一些文本中提取数字。目前我正在使用以下内容:

echo "2.5 test. test -50.8" | tr '\n' ' ' | sed -e 's/[^0-9.]/ /g' -e 's/^ *//g' -e 's/ *$//g' | tr -s ' '
Run Code Online (Sandbox Code Playgroud)

这会给我 2.5,“。” 和 50.8。我应该如何修改第一个sed以便检测浮点数,包括正数和负数?

sed text-processing numeric-data

3
推荐指数
1
解决办法
2万
查看次数

sed: !p 命令奇怪的行为

为什么以下命令打印数值?

$ iostat | sed -n '/[:digit:]/!p'

       1.56    1.38    0.31    0.34    0.03   96.38
Run Code Online (Sandbox Code Playgroud)

sed numeric-data

3
推荐指数
1
解决办法
265
查看次数