x.xx 到 0x.xx 形式的十进制转换数,sed?

x.xx 到 0x.xx 形式的十进制转换数,sed?

我有一个以下形式的文件

...
num  0.12 num num 
num 25.53 num num
num  7.82 num num
...

我想转换每行的第二个字段,在数字 >= 0 和 < 10 处添加“0”,因此输出将具有以下形式:

...
num 00.12 num num
num 25.53 num nnum  
num 07.82 num num
...

我尝试过

sed 's/ 7./07./2'

但它对空格不敏感,因此它会替换任何出现的“7”。

答案1

awk

$ awk '$2 = sprintf("%05.2f",$2)' file
num 00.12 num num
num 25.53 num num
num 07.82 num num

答案2

你所追求的可能是这样的:

sed 's/ \([0-9]\.\)/0\1/'

它匹配一个空格,后跟 0 到 9 范围内的一位数字,后跟一个点,并用 0 替换该空格。括号标记在表达式的替换部分中\([0-9]\.\)引用的组。\1

答案3

如果用的话怎么办awk

$ awk '$2>0 && $2<10 {$2="0"$2}1' file
num 00.12 num num
num 25.53 num num
num 07.82 num num

答案4

纯外壳:

while read a b rest; do 
    b=$(printf "%05.2f" $b); 
    echo "$a $b $rest";
done < file.txt

相关内容