标签: numeric-data

比较 bash 变量以查看是否可以被 5 整除

这是我的代码;我想$COUNTER多次比较各种。

if [ "$COUNTER" = "5" ]; then
Run Code Online (Sandbox Code Playgroud)

没关系,但我希望它在诸如等动态时间这样做5,10,15,20

scripting test numeric-data

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

如何分别根据其他列中的变量获取列中值的总和?

我有一个如下表数据

abc 1   1   1
bcd 2   2   4
bcd 12  23  3
cde 3   5   5
cde 3   4   5
cde 14  2   25
Run Code Online (Sandbox Code Playgroud)

我想要根据第一列中的变量计算每列中的值的总和,所需的结果如下所示:

abc 1   1   1
bcd 14  25  7
cde 20  11  35
Run Code Online (Sandbox Code Playgroud)

我像这样使用 awk 命令

awk -F"\t" '{for(n=2;n<=NF; ++n)a[$1]+=$n}END{for(i in a ) print i, a[i] }' tablefilepath
Run Code Online (Sandbox Code Playgroud)

我得到的结果如下:

abc 3
bcd 46
cde 66
Run Code Online (Sandbox Code Playgroud)

我认为我的代码结尾是错误的,但不知道如何修复它。我需要一些指示来修复代码。

awk shell-script text-processing numeric-data

5
推荐指数
1
解决办法
1472
查看次数

zsh中printf中的千位分隔符

printf一段时间以来,我一直在尝试定义千位分隔符,但我发现 zsh 存在一些问题。

在 bash 中,我可以使用类似的东西:

$ printf "%'d\n" 1234567890
1,234,567,890
Run Code Online (Sandbox Code Playgroud)

但在 zsh 中它不起作用:

$ printf "%'d\n" 1234567890
printf: %': invalid directive
Run Code Online (Sandbox Code Playgroud)

我刚刚发现 coreutilsprintf会做得很好:

$/usr/bin/printf "%'d\n" 1234567890
1,234,567,890
Run Code Online (Sandbox Code Playgroud)

如何在 zsh 中使用千位分隔符?

$ zsh --version
zsh 5.0.2 (x86_64-pc-linux-gnu) 
Run Code Online (Sandbox Code Playgroud)

zsh numeric-data printf

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

按列值进行数字排序

例如,我有一些测试文件,想按列值对其进行排序。后

awk -F'[:,]' '{print $16}' test.json
Run Code Online (Sandbox Code Playgroud)

我得到第 16 列的下一个输出:

 123
 457
 68
 11
 939
 11
 345
 9
 199
 13745
Run Code Online (Sandbox Code Playgroud)

现在,当我想对它进行数字排序时,我使用

awk -F'[:,]' '{print $16}' test.json | sort -nk16
Run Code Online (Sandbox Code Playgroud)

但我只是回来而不是数字排序......

 11
 11
 123
 13745
 199
 345
 457
 68
 9
 939
Run Code Online (Sandbox Code Playgroud)

原因是什么,我认为-n参数足以进行数字排序......

sort numeric-data

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

bc比例:如何避免四舍五入?(计算小二项式概率)

以下代码计算 n 次试验中 k 次成功事件的二项式概率:

n=144
prob=$(echo "0.0139" | bc)

echo -e "Enter no.:" 
read passedno

k=$passedno
nCk2() {
    num=1
    den=1
    for((i = 1; i <= $2; ++i)); do
        ((num *= $1 + 1 - i)) && ((den *= i))
    done
    echo $((num / den))
}

binomcoef=$(nCk2 $n $k)

binprobab=$(echo "scale=8; $binomcoef*($prob^$k)*((1-$prob)^($n-$k))" | bc)

echo $binprobab
Run Code Online (Sandbox Code Playgroud)

当 $passedno (=k) 输入“5”时,结果显示为 0(而不是“0.03566482”),而输入“4”时,结果显示为“.07261898”。

如何以 8 位十进制数字的给定精度打印输出,而不获取输出的四舍五入值?

bc calculator numeric-data

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

向下舍入/截断列中的小数位

似乎有许多简洁的方法可以使用 awk 的 printf 甚至 bash 的 printf 将列中的所有数字四舍五入到小数点后一位。但是,我找不到一种同样简单的方法来将列中的所有数字减少到小数点后一位(但不是四舍五入)。目前最简单的排序方法是四舍五入到 2 个小数位,然后从第 1 列的每一行中删除最后一个字符。有人有更好的方法吗?示例输入和输出如下:

输入

123.434    
1456.8123  
2536.577    
345.95553  
23643.1454  
Run Code Online (Sandbox Code Playgroud)

输出

123.4    
1456.8  
2536.5    
345.9  
23643.1 
Run Code Online (Sandbox Code Playgroud)

text-processing numeric-data

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

使 awk 在非数字上产生错误

我有一个程序可以对文件中的一列求和:

awk -v col=2 '{sum+=$col}END{print sum}' input-file
Run Code Online (Sandbox Code Playgroud)

但是,它有一个问题:如果给它一个没有数字数据的文件,(或者如果缺少一个数字),它会将其解释为零。

如果其中一个字段无法解析为数字,我希望它产生错误。

这是一个示例输入:

bob 1
dave 2
alice 3.5
foo bar
Run Code Online (Sandbox Code Playgroud)

我希望它产生错误,因为 'bar' 不是数字,而不是忽略错误。

awk numeric-data

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

对数字列进行排序

我试图根据特定位置对文件进行排序,但这不起作用,这是数据和输出。

~/scratch$ cat  id_researchers_2018_sample 
id - 884209 , researchers - 1
id - 896781 , researchers - 4
id - 901026 , researchers - 15
id - 904091 , researchers - 1
id - 905525 , researchers - 1
id - 908660 , researchers - 5
id - 908876 , researchers - 7
id - 910480 , researchers - 10
id - 916197 , researchers - 1
~/scratch$ sort  -k 28,5 id_researchers_2018_sample 
id - 884209 , researchers - 1
id …
Run Code Online (Sandbox Code Playgroud)

sort numeric-data

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

链接在一起的两个范围之间的随机数输出

这个问题是关于在一个范围内生成随机数,这很好,但不适合我的情况。

\n

我将用 SQL 术语进行解释,因为在我看来,这更容易理解,尽管问题是关于bash. 我的想法是用代码的结果bash构建一个SQL脚本。

\n

我有两张 MySQL 表,一张是people,一张是places。每条记录都有一个唯一的整数 ID,范围为 1 到 139(地点)和 1 到 1519(人)。它们通过外键相互联系,意思是:一个地方可以有很多人,但一个人只能有一个地方。

\n
# 1-139  # 1-1519\nplace1 \xe2\x86\x92 person1\n       \xe2\x86\x92 person2\n       \xe2\x86\x92 person3\n       ... and so on\n
Run Code Online (Sandbox Code Playgroud)\n

我现在掌握的数据是,在一个地方所有的人都有联系,而其他地方没有任何联系。

\n

名额有139个,人数有1519人,所以我有1个名额,有1519人。

\n

我的目标是将人员随机分配到各个地方,并且每个地方至少有一个人。

\n

到目前为止我的代码是这样的:

\n
$ c=1519\n$ while [[ $c -ne 0 ]]; do \n    x=$((shuf -i 1-139 -n 1))\n    [[ $x -gt 139 ]] && continue\n    echo $x\n    (( c-- ))\n  done\n
Run Code Online (Sandbox Code Playgroud)\n

此代码生成 1-139 之间的 …

bash random numeric-data

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

使用“mawk”将十六进制转换为十进制超出范围

当十六进制数字相对较小时,我可以使用

echo 0xFF| mawk '{ printf "%d\n", $1}'
Run Code Online (Sandbox Code Playgroud)

将十六进制转换为十进制。

当十六进制数很大时,mawk不再起作用,例如

echo 0x8110D248 | mawk '{ printf "%d\n", $1 }'
Run Code Online (Sandbox Code Playgroud)

输出2147483647(这是错误的,2147483647相当于0x7FFFFFFF)。

如何转换更大的数字?

我有很多数字(每行一个数字,超过10M)需要处理,例如:每个0xFF\n 0x1A\n 0x25\n. 如何让它在这种场合发挥作用?经过xargs?有没有更好的方法呢?xargs真的很慢。

shell awk numeric-data

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