1

您好,我是编写脚本和寻找解决方案的新手。我有两个名称不同的文本文件,我想将它们合并到一个新的第三个文本文件中。每个文本文件的格式将完全相同,并且会是这样。每个文本文件将有一些(相同数量的)行以 # 符号开头,后跟一些文本。在以 # 符号开头的那些行之后。我将有以数字开头的行。这些行将在由空格分隔的三列中包含数字。前两列中的数字在两个文件中将相同,而第三列中的数字将不同。在几百行之后,我可能会有以 # 符号开头的行,然后是像以前一样以三列中的数字开头的行,这可以重复很多次。现在这就是我想要做的。我想创建一个新的文本文件,该文件将以 # 符号开头的行从第一个文本文件中完全复制。我想照原样复制前两列数字。这两列可以从第一个文本文件或第二个文本文件中复制,因为它们在两个文件中都是相同的。现在对于新文本文件中的第三列,我想在前两个文件的第三列中添加数字

新文本文件第三列的数字=(第一个文件第三列的数字+第二个文件第三列的数字)

在一些行之后,我可能会再次出现带有 # 符号的行,然后是 3 列中的数字。这可以重复。

下面仅给出一个文本文件的示例格式。第二个文本文件将具有完全相同的格式。

# 
# 
# 
# 
# 
# 
# 
 0.0   0.0 4.4226
 0.0   5.0 4.4246
 0.0  10.0 4.4456
 0.0  15.0 4.4876
 0.0  20.0 4.4453
 0.0  25.0 5.6585
 .
 .
 .
 .
# 
# 
#
# 
#
 0.0   0.0 0.410135
 0.0   5.0 0.745745
 0.0  10.0 0.574555
 0.0  15.0 0.415675
 0.0  20.0 0.575454
 0.0  25.0 0.410135
 0.0  30.0 0.678768
 0.0  35.0 0.410135
 0.0  40.0 0.976876
 0.0  45.0 0.678678
 0.0  50.0 0.410135
 0.0  55.0 0.678976
 0.0  60.0 0.410135
 0.0  65.0 0.687876
 0.0  70.0 0.768677
 .
 .
 .
 .
 .
 .

并且这种带有#符号和三列数字的行格式可以重复。三列中带有数字的行具有以空格分隔的列,并且在这些带有数字的行的开头也有一个空格。我希望我解释得很好。我更喜欢 bacth 脚本,因为它对我来说很容易运行。但是 perl 也可以。非常感谢您的帮助。高度赞赏。

新文件格式将与其他两个文件完全相同,第三列是第一个和第二个 txt 文件第三列中的数字总和。下面给出了示例第三种文件格式。

# 
# 
# 
# 
# 
# 
# 
 0.0   0.0 8.4355
 0.0   5.0 6.3553
 0.0  10.0 6.4327
 .
 .
 .
 .
# 
# 
# 
# 
# 
 0.0   0.0 4.832735
 0.0   5.0 7.436343
 0.0  10.0 0.323325
 0.0  15.0 4.876656
 .
 .
 .
 .
 .
 .

再次非常感谢您。我很头疼,因为我有很多这些文件。非常感谢您的帮助。

文件 1 在这里

# 
# 
# 
# 
# 
#
# 
 0.0   0.0 5.30562
 0.0   5.0 5.30562
 0.0  10.0 1.4852
90.0 355.0 1.99511
# 
# 
# 
# 
# 
 0.0   0.0 0.948027
 0.0   5.0 0.948027
90.0 355.0 1.54

文件 2 是

# 
# 
# 
# 
# 
# 
# 
 0.0   0.0 1.4621
 0.0   5.0 1.4621
 0.0  10.0 1.4621
90.0 355.0 3.3359
# 
# 
# 
# 
# 
 0.0   0.0 0.747458
 0.0   5.0 0.747458
90.0 355.0 0.550766

现在你可以检查我认为在开头和列之间有空格的问题

4

1 回答 1

0

尝试使用以下awk

awk 'NR==FNR {if($3~/[0-9]+\.[0-9]+/){a[i++]=$3}; next} \
     $3~/[0-9]+\.[0-9]+/ {$3=$3+a[j++]} \
     1' file1 file2 > file3

对注释中指定的样本输入进行测试:

$ cat file1
# comment here
90.0 355.0 1.54

$ cat file2
# comment here
90.0 355.0 0.550766

$ awk 'NR==FNR {if($3~/[0-9]+\.[0-9]+/){a[i++]=$3}; next} \
?      $3~/[0-9]+\.[0-9]+/ {$3=$3+a[j++]} \
?      1' file1 file2 > file3

$ cat file3
# comment here
90.0 355.0 2.09077
于 2013-10-19T10:07:01.837 回答