gpt4 book ai didi

bash - 使用 bash、awk 或 sed 对文件中的每个数字进行位移和位掩码的最快方法是什么?

转载 作者:行者123 更新时间:2023-11-29 09:44:09 25 4
gpt4 key购买 nike

我有一个文件 (tmp1),它是一个数字列表,格式如下:

4373610497
4416339969
4426498049
4435738625

这里的每个 64 位数字实际上是由多个 16 位字段组成的,这些字段具有我感兴趣的数字。

例如(这里只显示重要的 48 位):

4435738625 = 0000000000000001 0000100001100100 0000000000000001

我想要的数字是:

a= 0000000000000001 = 1
b= 0000100001100100 = 2148
c= 0000000000000001 = 1

这是我现在用来执行此操作的代码 - 但速度非常慢。输入文件包含 50 万到 100 万行,因此我正在尝试寻找更快或更有效地执行此操作的方法。

while read line; do
a=$((((line >> 32)) & 65535));
b=$((((line >> 16)) & 65535));
c=$((line & 65535));
printf "$a $b $c\n" >>tmp2
done <tmp1

我需要在 FreeBSD 机器上运行它 - 所以我不能使用 gawk。而且 awk 似乎不允许按位操作。

最佳答案

有一个解决方案可以满足您的需求。但如果它的工作速度比你的快,我就不知道了。你可以测试。

这里我只是用你的例子中的一个数字进行测试,你可以将它包装在一个循环中。

kent$  printf "%064s\n" "$(bc <<< "obase=2;4435738625")"|sed -r 's/.{16}/ibase=2;&\n/g'|bc
1
2148
1

关于bash - 使用 bash、awk 或 sed 对文件中的每个数字进行位移和位掩码的最快方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19404367/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com