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

ご覧のとおり、最初の 6 列の値は 16 進数で表され、最後の 4 列の値は 10 進数形式で表されます。すべての単一シンボルの 16 進数値に 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)-リリース)

#!/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 に答える