regex - 使用awk将第一列从十六进制转换为十进制

标签 regex linux awk sed hex

我有一个日志文件,其中第一列包含十六进制的日志时间戳,然后在其余列中包含日志文本。例如:

B60C0056: aaa1 bb1 ccc1 ddd1 eee1 fff
B60C0056: aaa2 bb2 ccc2 ddd2 eee2 fff
B60C0057: aaa3 bb3 ccc3 ddd3 eee3 fff
B60C0058: aaa4 bb4 ccc4 ddd4 eee4 fff
B60C0059: aaa5 bb5 ccc5 ddd5 eee5 fff

我需要将第一列转换为十进制,我正在使用以下方法来执行此操作,但不知道如何为整个文件实现此操作。

while read line
do
echo -e "$line"|awk '{print $1,$2,$3,$4,$5,$6}'
done <temp

但是如何将$1转换成小数呢?

echo "ibase=16; `awk '{print $1}'`" | bc

最佳答案

awkstrtonum 函数可以解决这个问题:

awk 'BEGIN{FS=OFS=":"} {$1=strtonum("0x" $1)} 1' file
3054239830: aaa1 bb1 ccc1 ddd1 eee1 fff
3054239830: aaa2 bb2 ccc2 ddd2 eee2 fff
3054239831: aaa3 bb3 ccc3 ddd3 eee3 fff
3054239832: aaa4 bb4 ccc4 ddd4 eee4 fff
3054239833: aaa5 bb5 ccc5 ddd5 eee5 fff

关于regex - 使用awk将第一列从十六进制转换为十进制,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30709172/

相关文章:

python - 在 PySpark 中提取多个正则表达式匹配项

linux - 将第一个字段作为前缀添加到文本文件中行中的所有其他字段

python - 在没有正则表达式的可能分隔符列表之后删除所有内容

linux - 如果在此示例中遇到空格,为什么 bash 脚本会中断?

c - 调用 SIGINT 时终止线程 - C

ruby - Gemfile.lock 写入错误,权限?

bash - AWK:将脚本输出从脚本重定向到另一个具有动态名称的文件

linux - 使用 awk 对常见元素进行分组

java - 使用正则表达式、Java 修改 XPath 字符串

python - 在 Python 中,如果单词以非字母数字字符开头,如何匹配它?