【发布时间】:2015-07-06 22:10:25
【问题描述】:
我正在尝试运行以下内容,但我显然有语法错误,我不确定它是什么。非常感谢您的帮助。
cat $file | awk '{if (($2 & 0x40) != 0) print $1; else {}}'
【问题讨论】:
标签: awk and-operator
我正在尝试运行以下内容,但我显然有语法错误,我不确定它是什么。非常感谢您的帮助。
cat $file | awk '{if (($2 & 0x40) != 0) print $1; else {}}'
【问题讨论】:
标签: awk and-operator
awk 不支持位运算符。但是,如果你有 gawk (GNU awk),你可以这样做:
gawk '{ if (and($2,0x40) != 0) print $1; }' $file
请注意,我删除了空的 else 子句和不必要的 cat。
请参阅手册了解其他bitwise operators 和gawk 中的用法。
【讨论】:
gawk 'and($2, 0x40) { print $1 }',但这是吹毛求疵。值得注意的是,POSIX awk 甚至没有十六进制数字,这意味着 gawk 在这种情况下是不合格的(0x40 应该被解析为0 x40,即0 和空变量@ 的串联987654328@. 其他 awks 确实这样做。)。在 POSIX awk 中,检查可以表述为awk '$2 % 128 >= 64 { print $1 }'——这很丑陋,但应该可以在任何地方使用。只要您只想检查一个位。