繁体   English   中英

使用批处理或perl脚本将两个文本文件合并为一个

[英]merging two text files into one using batch or perl script

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

新文本文件第三栏中的数字=(第一文件第三栏中的数字+第二文件第三栏中的数字)

在某些行之后,我可能会再次使用带有#号的行,然后是行,然后是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

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

尝试使用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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM