次の形式の数値のリストであるファイル(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 はビット単位の操作を許可していないようです。