检查bash中是否设置了第n位

jyu*_*429 1 binary bash awk

我想知道是否有办法用检查是否$2将第7位设置为1的东西替换if语句?

cat $file | awk '{if ($2 == 87) print $1; else {}}' > out.txt"
Run Code Online (Sandbox Code Playgroud)

例如,93应该打印一些东西而128不应该打印.

nos*_*nos 5

bash有按位运算符

测试第7位:

$ echo $(((93 & 0x40) != 0))
1

$ echo $(((128 & 0x40) != 0))
0
Run Code Online (Sandbox Code Playgroud)

另请参阅bash文档

虽然如果你从文件中解析出值,你可能最好继续使用awk,作为@RakholiyaJenish的答案


Rak*_*ish 3

您可以使用按位运算来检查第 7 位是否1gawk

and($2,0x40)
Run Code Online (Sandbox Code Playgroud)

注意:标准awk没有按位运算。因此,您可以使用bash按位运算或perl按位运算(用于字符串处理)。

使用gawk

gawk '(and($2,0x40)){print $1}' filename
Run Code Online (Sandbox Code Playgroud)

使用perl

perl -ane 'print "$F[0]\n" if ($F[1]&0x40)' filename
Run Code Online (Sandbox Code Playgroud)