我有一个以下形式的文件
...
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