我有一个包含以下内容的文件
$ 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 添加到每个符号的十六进制值。
预先感谢。
我有一个包含以下内容的文件
$ 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 添加到每个符号的十六进制值。
预先感谢。
这个应该适合你:
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
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
如果有帮助,请也尝试一下(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
这可能对您有用(GNU sed):
sed 's/\b\S\s/0&/g' file
查找单个非空格字符并在前面添加一个0
.