3

我有一个包含以下内容的文件

$ cat somefile
28 46 5d a2 26 7a 192 168 2 2  
0 15 e c8 a8 a3 192 168 100 3
54 4 2b 8 c 26 192 168 20 3

如您所见,前六列中的值以十六进制表示,后四列中的值以十进制格式表示。我只想将 0 添加到每个符号的十六进制值。

预先感谢。

4

4 回答 4

3

这个应该适合你:

while read -a line
do
    hex=(${line[@]:0:6})
    printf "%02x " ${hex[@]/#/0x}
    echo ${line[@]:6:4}
done < somefile

例子:

$ cat somefile 
28 46 5d a2 26 7a 192 168 2 2  
0 15 e c8 a8 a3 192 168 100 3
54 4 2b 8 c 26 192 168 20 3

$ while read -a line
> do
>     hex=(${line[@]:0:6})
>     printf "%02x " ${hex[@]/#/0x}
>     echo ${line[@]:6:4}
> done < somefile
28 46 5d a2 26 7a 192 168 2 2
00 15 0e c8 a8 a3 192 168 100 3
54 04 2b 08 0c 26 192 168 20 3
于 2013-07-27T04:16:21.193 回答
1

awk如果这是一个选项,这是一种方法:

awk '{for(i=1;i<=6;i++) if(length($i)<2) $i=0$i}1' file

测试:

$ cat file
28 46 5d a2 26 7a 192 168 2 2  
0 15 e c8 a8 a3 192 168 100 3
54 4 2b 8 c 26 192 168 20 3

$ awk '{for(i=1;i<=6;i++) if(length($i)<2) $i=0$i}1' file
28 46 5d a2 26 7a 192 168 2 2  
00 15 0e c8 a8 a3 192 168 100 3
54 04 2b 08 0c 26 192 168 20 3
于 2013-07-27T04:54:08.320 回答
0

如果有帮助,请也尝试一下(bash 版本 4.1.7(1)-release)

#!/bin/bash

while read line;do
  arr=($line)

  i=0
  for num in "${arr[@]}";do
     if [ $i -lt 6 ];then
         if [ ${#num} -eq 1 ];then
             arr[i]='0'${arr[i]};
         fi
     fi
     i=$((i+1))

  done
  echo "${arr[*]}"
done<your_file
于 2013-07-27T04:56:59.453 回答
0

这可能对您有用(GNU sed):

sed 's/\b\S\s/0&/g' file

查找单个非空格字符并在前面添加一个0.

于 2013-07-27T10:03:08.737 回答