awk进制转换(只能十六进制转换为10进制)
# 1 使用 --non-decimal-data + begin + sprintf(); print
# 2 使用 --non-decimal-data + printf
AWK有ASCII字符转换
# ASCII码转换为字符
awk -v d1=65 -v d2=97 'BEGIN{printf "%c %c\n",d1,d2}' --> A a
awk -v d=$[10#65] 'BEGIN{printf "%c\n",d}' --> A
echo 65 | awk 'BEGIN{printf "%c\n",$1}' 不使用-v无效无输出
# 字符转换为ASCII码
echo "Aa"|awk -F "" 'BEGIN{for(i=0;i<255;i++)a[sprintf("%c",i)]=i}{print a[$1]" "a[$2]}' --> 65 97
[解析] 事先建立一个ASCII的映射表, 用sprintf返回其ASCII字符, 然后作为下标赋予该数组的值, 后面的就是正常的查表.
乔纳森答案 乔纳森答案变体 16进制转换为10进制
# $([[ $(awk --version) = GNU* ]] && echo --non-decimal-data) --> --non-decimal-data
echo "00 00 01800080" | awk --non-decimal-data 'BEGIN{OFS=FS}{$4=sprintf("%d","0x" $3);print}' --> 00 00 01800080 25165952
echo "00 00 01800080" | awk --non-decimal-data '{printf("%d\n","0x"$3)}' --> 输出:25165952
echo 0x01800080 | awk '{ printf "%s: %x %d\n", $1, $1,$1 }' --> 输出: 0x01800080: 0 0
echo 0x01800080 | awk --non-decimal-data '{ printf "%s: %x %d\n", $1, $1,$1 }' --> 输出: 0x01800080: 1800080 25165952
echo 0x01800080 | gawk '{ printf "%s: %x %d\n", $1, $1,$1 }' --> 输出: 0x01800080: 0 0
echo 0x01800080 | gawk --non-decimal-data '{ printf "%s: %x %d\n", $1, $1,$1 }' --> 输出: 0x01800080: 1800080 25165952
echo $[16#01800080] --> 输出25165952
echo 01800080 | awk '{sprintf("%d", "0x" $1)}' -- 无效
echo 01800080 | awk --non-decimal-data '{printf("%d\n", "0x" $1)}' 输出--> 25165952
echo 01800080 | awk 'BEGIN{sprintf("%d", "0x" $1)}' -- 无效
echo 01800080 | awk 'BEGIN{OFS = FS}{sprintf("%d", "0x" $1)}' -- 无效
echo 01800080 | awk --non-decimal-data 'BEGIN{OFS=FS}{sprintf("%d","0x" $1)}' -- 无效
echo 01800080 | awk --non-decimal-data 'BEGIN{OFS=FS}{print sprintf("%d","0x" $1)}' --> 输出25165952
echo 01800080 | awk --non-decimal-data 'BEGIN{OFS=FS}{$1=sprintf("%d","0x" $1);print}' --> 输出25165952
我需要将第3列拆分为3,
123711184642,02,3583090366663629,639f02012437d4
123711184642,02,3583090366663629,639f02,0124,37d4 --> 我需要将第3列拆分为3,如下所示:
123711184642,02,3583090366663629,639f02,292,14292 --> 并将最后两列中的数字转换为十进制:
echo "123711184642,02,3583090366663629,639f02012437d4" | awk $([[ $(awk --version) = GNU* ]] && echo --non-decimal-data) -F, '
BEGIN {OFS = FS}
{
$6 = sprintf("%d", "0x" substr($4, 11, 4))
$5 = sprintf("%d", "0x" substr($4, 7, 4))
$4 = substr($4, 1, 6)
print
}'
参考:https://qa.1r1g.com/sf/ask/257817731/
「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。




