perl对比两个文件的行

对比两个文件的各行,得到A与B相同的行/A与B不相同的行

主要功能


  • 得到相同行
  • 得到A中包含,B不包含的行
  • 得到B中包含,A中不包含的行

具体执行情况


Perl代码


#!/usr/bin/perl
#----------------------------------------------------------------------
#
# Filename: constrast_line.pl
# Description: file function description
#
# Author:
# Version: 1.0.0
# Create: 2017-12-06 08:15:33
# Last Modified: 2017-12-06 08:15:33
# History: Modify the history
#---------------------------------------------------------------------- use warnings;
use strict;
use List::MoreUtils qw/uniq/; ###########################################
# initial
########################################### my $Has_Help = "";
my ($a_file, $b_file, , @a_lines, @b_lines, @in_a_not_in_b, @in_a_add_in_b, @in_b_not_in_a); if( $#ARGV < 0 ) {
&print_usage;
exit;
}
&parse_argv; if( $Has_Help =~ /TRUE/ ) #show help
{
&print_usage;
exit;
} ###########################################
# read A and B file
###########################################
open(REF_FLIE, "$a_file") || die ("Could not open file $a_file ! \n");
while (my $line = <REF_FLIE>){
chomp($line);
push(@a_lines,$line);
}
close REF_FLIE; open(ANAL_FLIE, "$b_file") || die ("Could not open file $b_file ! \n");
while (my $line = <ANAL_FLIE>){
chomp($line);
push(@b_lines,$line);
}
close ANAL_FLIE; ###########################################
# handle
###########################################
foreach my $line (@a_lines){
next if($line =~ /^\s*$/); if($line ~~ @b_lines){
#print "$line\n";
push(@in_a_add_in_b,$line);
}
else{
#print "$line\n";
push(@in_a_not_in_b,$line);
}
} foreach my $line (@b_lines){
next if($line =~ /^\s*$/); if($line ~~ @a_lines){
#print "$line\n";
}
else{
#print "$line\n";
push(@in_b_not_in_a,$line);
}
} print ("\n");
print("analys results:\n");
print ("-"x100,"\n");
print("The following $#in_a_add_in_b cases in $a_file add in $b_file:\n");
print ("-"x100,"\n");
foreach my $line (@in_a_add_in_b){
print("$line\n");
} print ("\n\n");
print ("-"x100,"\n");
print("The following $#in_a_not_in_b cases in $a_file but not in $b_file:\n");
print ("-"x100,"\n");
foreach my $line (@in_a_not_in_b){
print("$line\n");
} print ("\n\n");
print ("-"x100,"\n");
print("New Line\n");
print("The following $#in_b_not_in_a cases in $b_file but not in $a_file:\n");
print ("-"x100,"\n");
foreach my $line (@in_b_not_in_a){
print("$line\n");
} print ("\n\n"); #################################################
# Sub-routine: print_usage()
#################################################
sub print_usage {
print "\nUsage: perl $0 -r <reference file> -a <analysis file>\\\n";
print " [-l <testcase_all_lst> -d <logdir>] \\\n";
print " [-h] \n\n";
print "For example:\n";
print " perl $0 -r reference -a analysis\n";
print " perl $0 -h \n";
print "\n";
} #################################################
# Sub-routine : parse_argv()
#################################################
sub parse_argv {
if($#ARGV != 3){
$Has_Help = "TRUE";
return;
}
for(my $i=0; $i<=$#ARGV; $i++) {
if( $ARGV[$i] =~ /-r/ ) {
$i++;
if(!defined $ARGV[$i])
{
$Has_Help = "TRUE";
}
$a_file = $ARGV[$i];
}
elsif( $ARGV[$i] =~ /-a/ ) {
$i++;
if(!defined $ARGV[$i])
{
$Has_Help = "TRUE";
}
$b_file = $ARGV[$i];
}
elsif( $ARGV[$i] =~ /-h/ ) {
$Has_Help = "TRUE";
}
else { ### other options
$Has_Help = "TRUE";
}
}
}

perl对比两个文件的行的更多相关文章

  1. Shell 命令行求两个文件每行对比的相同内容

    Shell 命令行求两个文件每行对比的相同内容 遇到的一个实际问题是,2017年08月01日起,所有未经实名的域名,全部停止解析.而我手上有不少域名,其中很多都是没有实名的.但我不知道哪些实名了,哪些 ...

  2. Linux下对比两个文件夹的方法

    最近拿到一份源代码,要命的是这份源代码是浅克隆模式的git包,所以无法完整显示里面的修改的内容. 今天花了一点点时间,找了一个在Linux对比两个文件夹的方法. 其实方法很简单,用meld 去对比两个 ...

  3. linux对比两个文件的差异

    在项目维护阶段,经常会对垃圾文件进行清理.比如没有在数据库中的文件进行删除,这个时候最好的选择就是使用shell命令了:废话不多说直接上代码: 1.首先准备好从数据表导出来的数据,方法随意 2.在服务 ...

  4. Notepad++如何对比文件 Notepad++对比两个文件代码方法

    大家在使用Notepad++的时候,需要对编辑的两个文件进行比较,找出两个文件代码的区别,快速进行编辑修改,那么Notepad++如何对比文件,下面小编就给大家带来Notepad++对比两个文件代码方 ...

  5. python对比两个文件问题

    写一个比较两个文本文件的程序. 如果不同, 给出第一个不同处的行号和 列号. 比较的时候可以使用zip()函数 a=open('test.txt','r') b=open('test2.txt','r ...

  6. 【batch】命令对比两个文件夹下的文件(增删改的对比)

    1.分别打印两个目录的结构 TREE D:\SOURCE /A /F >D:\SOURCE.TXT TREE D:\DEST /A /F >D:\DEST.TXT 2.然后使用工具/命令进 ...

  7. 如何使用UltraCompare对比两个文件夹内容差异

    http://jingyan.baidu.com/article/cb5d6105e13599005c2fe0f8.html  

  8. perl命令批量替换文件内容

    转自:http://www.jbxue.com/article/12638.html 使用perl命令批量替换文件内容. 对linux下的文件内容进行替换,有时不用编写perl脚本,用perl命令就可 ...

  9. shell 统计某个文件的行数命令

    语法:wc [选项] 文件- 说明:该命令统计给定文件中的字节数.字数.行数.如果没有给出文件名,则从标准输入读取.wc同时也给出所有指定文件的总统计数.字是由空格字符区分开的最大字符串. 该命令各选 ...

随机推荐

  1. opencv中的Java库

    opencv中有一个用Java编写的库,opencv2.4.4以上,在opencv解压包里路径:opencv/build/java/opencv.jar,再依据用户计算机位数选择,假设是32位计算机, ...

  2. 1.5 Upgrading From Previous Versions官网剖析(博主推荐)

    不多说,直接上干货! 一切来源于官网 http://kafka.apache.org/documentation/ 1.5 Upgrading From Previous Versions 1.5 从 ...

  3. 在window编写好的网站往linux上发布

    得知ASP.NET CORE可以跨平台,我内心很躁动,毕竟自己喜欢的,之前没有学过linux导致一开始上手linux有点困难,按照https://www.microsoft.com/net/core# ...

  4. BZOJ3676: [Apio2014]回文串(SAM+Manacher/PAM)

    Description 考虑一个只包含小写拉丁字母的字符串s.我们定义s的一个子串t的“出 现值”为t在s中的出现次数乘以t的长度.请你求出s的所有回文子串中的最 大出现值. Input 输入只有一行 ...

  5. JavaScript学习总结(1)——JavaScript基础

    一.JavaScript语言特点 1.1.JavaScript是基于对象和事件驱动的(动态的) 它可以直接对用户或客户输入做出响应,无须经过Web服务程序.它对用户的响应,是采用以事件驱动的方式进行的 ...

  6. windows服务插件利器-新生命组件XAgent使用心得

    1.简单介绍 XAgent为大石头带领下的新生命团队自己开发的一个.Net下的常用的Windows服务管理组件利器,通过在控制台中简单的输入1,2,3,4,5等数字可以实现一步安装.卸载Windows ...

  7. Activity启动过程源代码分析

    事实上写分析源代码文章总会显得非常复杂非常乏味,可是梳理自己看源代码时的一些总结也是一种提高. 这篇博客分析下Activity启动过程源代码,我会尽量说得简单点. 个人的观点是看源代码不能看得太细,否 ...

  8. C# 反射具体解释

    watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/ ...

  9. dot 语法全介绍

    0. 保存 保存为 pdf:dot -Tpdf iris.dot -o iris.pdf 1. 基本 (1)无向图.有向图.子图 graph G {} // 无向图 digraph G {} // 有 ...

  10. Project Euler 389 Platonic Dice (概率)

    题目链接: https://projecteuler.net/problem=389 题意: 掷一个正四面体骰子,记点数为\(T\). 掷\(T\)个正六面体骰子,记点数和为\(C\). 掷\(C\) ...