我试图用sed -i交互地用另一个变量替换一个变量。这似乎很容易,但是由于某些原因无法正常工作。
假设我有一个包含1列的文件:
1
2
3
4
5
6
7
8
.
.
我想将这些值分配给一个变量,并对它们进行算术运算,这将是新变量,然后用新变量替换先前的变量。类似于以下内容:
for i in `awk '{print $1}' file.dat`;
do
j=`echo $i | awk '{print ($1)*0.66}'`;
sed -i "s/$i/$j/g" file.dat;
done
我希望得到以下信息:
0.66
1.32
1.98
2.64
3.3
3.96
4.62
5.28
但是,这就是我得到的:
0.3.963.96
1.1.95.282
1.95.28
2.3.964
3.3
3.96
4.62
5.28
我知道这可能很简单。但是,今天我的大脑不起作用。任何帮助将不胜感激。
答案 0 :(得分:1)
当$i
为1
时,文件的第一行更改为0.66
。
然后,当$i
为6
时,它将用6
替换每个3.96
字符,因此该行变为0.3.963.96
。
您需要更改正则表达式,使其仅匹配整行:
sed -i "s/^$i\$/$j/g" file.dat;
^
和$
匹配行的开头和结尾。
虽然似乎没有太多理由使用sed
,但是您可以完全使用awk
来做到这一点:
awk '{print $1 * 0.66}' file.dat > newfile.dat
如果您使用的是GNU awk,则其扩展名可用于就地修改文件。
gawk -i inplace '{print $1 * 0.66}' file.dat