我有一个文件(tmp1),它是一个数字列表,格式如下:
4373610497
4416339969
4426498049
4435738625
这里的每个 64 位数字实际上由多个 16 位字段组成,这些字段具有我感兴趣的数字。
例如(这里只显示重要的 48 位):
4435738625 = 0000000000000001 0000100001100100 0000000000000001
我想要的数字是:
a= 0000000000000001 = 1
b= 0000100001100100 = 2148
c= 0000000000000001 = 1
这是我现在用来执行此操作的代码 - 但它非常缓慢。输入文件包含 500K 到 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 似乎不允许按位操作。