这是我的代码;我想$COUNTER多次比较各种。
if [ "$COUNTER" = "5" ]; then
Run Code Online (Sandbox Code Playgroud)
没关系,但我希望它在诸如等动态时间这样做5,10,15,20。
我有一个如下表数据
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)
我认为我的代码结尾是错误的,但不知道如何修复它。我需要一些指示来修复代码。
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) 例如,我有一些测试文件,想按列值对其进行排序。后
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参数足以进行数字排序......
以下代码计算 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 位十进制数字的给定精度打印输出,而不获取输出的四舍五入值?
似乎有许多简洁的方法可以使用 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) 我有一个程序可以对文件中的一列求和:
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' 不是数字,而不是忽略错误。
我试图根据特定位置对文件进行排序,但这不起作用,这是数据和输出。
~/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) 这个问题是关于在一个范围内生成随机数,这很好,但不适合我的情况。
\n我将用 SQL 术语进行解释,因为在我看来,这更容易理解,尽管问题是关于bash. 我的想法是用代码的结果bash构建一个SQL脚本。
我有两张 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\nRun 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\nRun Code Online (Sandbox Code Playgroud)\n此代码生成 1-139 之间的 …
当十六进制数字相对较小时,我可以使用
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真的很慢。
numeric-data ×10
awk ×3
sort ×2
bash ×1
bc ×1
calculator ×1
printf ×1
random ×1
scripting ×1
shell ×1
shell-script ×1
test ×1
zsh ×1