Why the second command outputs a different value?
For historical reasons,
x to be a multiplication operator. So
0x3 is evaluated to be 0.
Is it possible to pass the skip|seek offset to dd as an hexadecimal value?
Not directly, as far as I know. As well as multiplication using the operator
x, you can suffix any number with
b to mean "multiply by 512" (0x200) and with
K to mean "multiply by 1024" (0x400). With GNU dd you can also use suffixes
Y to mean multiply by 2 to the power of 20, 30, 40, 50, 60, 70, 80 or 90, respectively, and you can use upper or lower case except for the
b suffix. (There are many other possible suffixes. For example,
EB means "multiply by 1018" and
PiB means "multiply by 250". See
info coreutils "block size" for more information, if you have a GNU installation.)
You might find the above arcane, anachronistic, and geeky to the point of absurdity. Not to worry: you are not alone. Fortunately, you can just ignore it all and use your shell's arithmetic substitution instead (bash and other Posix compliant shells will work, as well as some non-Posix shells). The shell does understand hexadecimal numbers, and it allows a full range of arithmetic operators written in the normal way. You just need to surround the expression with
# dd if=2013-Aug-uptime.csv bs=1 count=$((0x2B * 1024)) skip=$((0x37))