用另一个文件的一部分替换文件的一部分

时间:2017-11-13 18:00:06

标签: bash replace

我有两个包含大量浮点数的文件。我想用文件2中的浮点数替换文件1中的一个浮点数,使用行和字符来查找数字(而不是它们的值)。

关于这个主题的很多主题,但我找不到任何使用第二个文件复制值的内容。

以下是我的两个文件的示例:

File1中:

  14    4
2.64895E-01  4.75834E+02  2.85629E+05  -9.65829E+01
2.76893E-01  8.53749E+02  4.56385E+05  -7.65658E+01
6.25576E-01  5.27841E+02  5.72960E+05  -7.46175E+01
8.56285E-01  4.67285E+02  5.75962E+05  -5.17586E+01

文件2:

Some text on the first line
1
Some text on the third line
0
AND01  0.53758275  0.65728944
AND02  0.64889566  0.53386002
AND03  0.65729386  0.64628194
AND04  0.26586960  0.46582925
AND05  0.46480534  0.57415869

在这个特定的例子中,我想用File2(0.65728944)的第5行写的第二个浮点数替换File1的第二行的第一个数字(2.64895E-01)。

注意:数字的值会根据我考虑的文件而改变,所以我必须根据文件中的位置来识别数字。

我对使用bash脚本非常陌生,只使用" sed"命令到现在为止修改我的文件。

欢迎任何帮助:) 非常感谢您的投入!

1 个答案:

答案 0 :(得分:0)

bash中做到这一点并不难,但如果这不是一个严格的要求,那么使用像{{{{}这样的实际文本处理工具可以实现更简单,更简洁的解决方案。 1}}:

awk

说明:首先阅读awk 'NR==5 {val=$2} NR>FNR {FNR==2 && $1=val; print}' file2 file1 ,然后将第5条记录的第二个字段存储在变量file2中(第一部分:val)。然后,阅读NR==5 {val=$2},打印每一行,但替换第二条记录的第一个字段(file1是当前文件记录号,FNR是所有文件中的记录总数,所以far)值存储在NR

通常,val程序由awk个序列组成。 pattern { actions }是一系列pattern将被执行的条件。 actions .. $1是具有字段值的变量,每个行(记录)被拆分为字段分隔符($NF变量或FS选项)上的字段,默认为空格。

结果(输出):

-F'..'