![从文件中提取值并将这些值放在另一个文件中的特定行上](https://linux22.com/image/154718/%E4%BB%8E%E6%96%87%E4%BB%B6%E4%B8%AD%E6%8F%90%E5%8F%96%E5%80%BC%E5%B9%B6%E5%B0%86%E8%BF%99%E4%BA%9B%E5%80%BC%E6%94%BE%E5%9C%A8%E5%8F%A6%E4%B8%80%E4%B8%AA%E6%96%87%E4%BB%B6%E4%B8%AD%E7%9A%84%E7%89%B9%E5%AE%9A%E8%A1%8C%E4%B8%8A.png)
我想从文件 1 第 2 行获取值 0.98728E-02,并放入文件 2 第 8 行的值 1,000。如何用文件 1 替换文件 2?
我的文件1:
Genetic variance(s) for effect 2
0.98728E-02
Genetic variance(s) for effect 3
0.56818E-02
我需要获取值“0.98728E-02”并放在行中代替文件 2 的“1.0000”
我的文件2:
DATAFILE
renf90.dat
NUMBER_OF_TRAITS
1
NUMBER_OF_EFFECTS
9
RANDOM_RESIDUAL VALUES
1.0000
RANDOM_GROUP
2
我开始用“sed”语言来做,但我不知道还能做什么......
sed '23s/1.0000/ .....
我想要的最终文件。
DATAFILE
renf90.dat
NUMBER_OF_TRAITS
1
NUMBER_OF_EFFECTS
9
RANDOM_RESIDUAL VALUES
0.98728E-02
RANDOM_GROUP
2
PS:行前或行后没有任何常量关键字。 PS:根据输出文件(文件 1),我需要提取两个或三个值。
答案1
我确信可以使用sed
,但您可以轻松地使用awk
:
awk 'NR==2 { value=$1 }
FILENAME=="file2" { if (FNR==8) print value; else print }
' file1 file2 > output_file
答案2
将第 8 行替换为file2
第 2 行的内容file1
:sed
这个改变file2
的地方
sed -i'' '8s/.*/'"$(sed -n '2p' file1)"'/' file2
或与上面相同,但将更改写入file2.new
sed '8s/.*/'"$(sed -n '2p' file1)"'/' file2 > file2.new
答案3
i=`sed -n '2p' file1`
sed "8s/1.0000/$i/g" file2
输出
DATAFILE
renf90.dat
NUMBER_OF_TRAITS
1
NUMBER_OF_EFFECTS
9
RANDOM_RESIDUAL VALUES
0.98728E-02
RANDOM_GROUP
2
注意:如果你想要输出应该在file2中
sed -i "8s/1.0000/$i/g" file2