次の内容のファイルがあります
$ 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 を追加したいだけです。
事前に感謝します。
次の内容のファイルがあります
$ 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 を追加したいだけです。
事前に感謝します。
これはあなたのためにうまくいくはずです:
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)-リリース)
#!/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
ます。