为什么awk
不适用于以下命令而不是sed
:
su -c "stdbuf -i0 -o0 -e0 od --width=144 -x /dev/input/event3 | sed 's%^\([a-z0-9]\+ \)\{11\}%%;s%\(....\).*%\1%'"
这会在每次按键时打印所按键的USB HID ID 号。
示例输出(0028
是 forReturn和00e4
for Right-Ctrl):
0028
0028
0028
0028
0028
00e4
00e4
00e4
这是按两次时没有 sed
//过滤的两行输出cut
。USB HID ID 编号在第 12 列:awk
Return
0000000 2d6f 511e 0000 0000 051b 0007 0000 0000 0004 0004 0028 0007 2d6f 511e 0000 0000 051d 0007 0000 0000 0001 001c 0000 0000 2d6f 511e 0000 0000 051e 0007 0000 0000 0000 0000 0000 0000 2d73 511e 0000 0000 a150 0007 0000 0000 0004 0004 0028 0007 2d73 511e 0000 0000 a153 0007 0000 0000 0001 001c 0001 0000 2d73 511e 0000 0000 a154 0007 0000 0000 0000 0000 0000 0000
0000220 2d73 511e 0000 0000 9b5a 0008 0000 0000 0004 0004 0028 0007 2d73 511e 0000 0000 9b5d 0008 0000 0000 0001 001c 0000 0000 2d73 511e 0000 0000 9b5e 0008 0000 0000 0000 0000 0000 0000 2d74 511e 0000 0000 4f90 0005 0000 0000 0004 0004 0028 0007 2d74 511e 0000 0000 4f93 0005 0000 0000 0001 001c 0001 0000 2d74 511e 0000 0000 4f94 0005 0000 0000 0000 0000 0000 0000
我试过了
su -c "stdbuf -i0 -o0 -e0 od --width=144 -x /dev/input/event3 | cut -d' ' -f12"
它也有效。但它只显示在接下来的两次按键之后按下的键。stdbuf 在这里没有帮助,尽管它应该将标准输入/输出/错误流缓冲调整为 0。
我的mawk
命令如下所示:
su -c "stdbuf -i0 -o0 -e0 od --width=$((48*3)) -x /dev/input/event3 | mawk '{ print $12 }'"
但它只向我展示了一些二重奏,然后是一些换行符,然后是二重奏。它似乎非常滞后/缓慢。当我按下一个键时,什么也没有发生。多次按下不同的键后,我总是得到一堆二和换行符。不管我按了哪个键!例子:
2
2
2
2
2
2
2
2
2
2
2
2
我怎样才能解决这个问题?为什么会出现这种情况?
更新
当我使用它gawk
而不是mawk
它时不再滞后(无缓冲)。但是我仍然看不到正确的值应该是0028
or00e4
等等Return,Right-Ctrl作为示例键。