我有一个日志文件,其中包含第一列中十六进制的日志时间戳,然后在其余列中记录文本。例如:
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
答案 0 :(得分:4)
awk
的{{1}}函数可以解决这个问题:
strtonum
答案 1 :(得分:3)
使用GNU awk:
gawk --non-decimal-data '{ $1 = sprintf("%d:", "0x" $1) } 1' filename
这是一个小小的混蛋:"0x" $1
连接0x
,第一个字段为字符串,sprintf
然后继续将其解释为一个数字,由于{被解析为十六进制数字{1}}和0x
。这只适用于GNU awk。
或者,考虑使用Perl:
--non-decimal-data
这应该适用于Perl可用的任何地方(实际上应该是无处不在)。
编辑:更好的Perl解决方案。
答案 2 :(得分:2)
尝试:
{{1}}