多次用第二个文件的每一行替换第一个文件的一行

时间:2013-07-16 12:15:54

标签: sed awk grep

我有两个文本文件。一个是fortran程序的输入文件,另一个是两列中的实数(多行)。如果我可以多次将第一个文件的第三行替换为第二个文件的每一行,那么我可以自动完成任务。我想用文件2中的NR = 1替换文件1中的NR = 3,运行输入。再次用文件2中的NR = 2替换文件1中的NR = 3,运行输入。依此类推。 我想在Windows上使用批处理文件和gawk,grep,sed。 (通过unxutil在Windows上提供gawk,grep,sed和其他unix / linux命令)。可能吗?有帮助吗?例: 第一个文件

1  0  0  0  0  0  0  3  0  0  0  0  0  0  0  0 
1  0  0  0  0  0  0  3  0  0  0  0  0  0  0  0 
17.01425  0.00000 
0.0 0.0 1.000 1.000  2700.0      
 0.0 0.0 0.0 0.0 0.0                        
 100.0  290.0                               
1    360.0                                  
 310.0 800.0  2700.0 2700.0                   
  2   10  360.0                   

第二档

17.01425 0.00000
17.37597 10.00000
17.73771 20.00000
18.09943 30.00000
................ 

我希望第一个(17.01425 0.00000)的第3行被第二个文件(17.73771 20.00000等的每一行替换。)

2 个答案:

答案 0 :(得分:2)

这是部分猜测 - 没有一些预期的输出,但这可能是你想要的:

awk '
NR==FNR { file1[NR]=$0; next }
{
    for (i=1; i<=(NR-FNR); i++)
        print (i==3 ? $0 : file1[i]) > ("outfile" FNR)
}
' file1 file2

答案 1 :(得分:1)

这是一个建议:

while read line
do
  sed -i "3c${line}" file1.txt
  # do whatever you need to with the modified file
done < file2.txt

如果您需要保留原始file1.txt,请将sed行更改为:

sed "3c${line}" < file1.txt > tempfile.txt

然后针对临时文件运行后续命令......