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. atxserver2安装与使用

    atxserver2的使用 1.首先clone atxserver2代码,此时使用pip3 install requirements后执行python main.py 会提示“ [WinError 1 ...

  2. Vue+TypeScript学习

    Vue CLI 内置了 TypeScript 工具支持.在 Vue 的下一个大版本 (3.x) 中也计划了相当多的 TypeScript 支持改进,包括内置的基于 class 的组件 API 和 TS ...

  3. ASM(四) 利用Method 组件动态注入方法逻辑

    这篇继续结合样例来深入了解下Method组件动态变更方法字节码的实现.通过前面一篇,知道ClassVisitor 的visitMethod()方法能够返回一个MethodVisitor的实例. 那么我 ...

  4. html只能有一个id,并且id的值只能是一个

    1.如果有相同的ID,javascript只会取第一个具有该ID的标签. 2.如果id值有两个,JS只会取到第一个,并不会像class类一样,类名并列就可以同时取到.

  5. Flask项目之手机端租房网站的实战开发(六)

    说明:该篇博客是博主一字一码编写的,实属不易,请尊重原创,谢谢大家! 接着上一篇博客继续往下写 :https://blog.csdn.net/qq_41782425/article/details/8 ...

  6. datetime小练习

    题目: 1.计算你的生日比如近30年来(1990-2019),每年的生日是星期几,统计一下星期几出现的次数比较多2,生日提醒,距离生日还有几天 # !/usr/bin/env python # -*- ...

  7. ECMALL功能拓扑图以及模式分析

    ECMALL  VS  常规的B2C产品(以ECSHOP做对比)的区别: 1.支持多用户在同一个域名下开店. 2.开店的卖家各自结算,直接收钱.平台只是提供了一个类似传统行业的摊位.平台不过手金钱 3 ...

  8. [D3] Debug D3 v4 with Dev Tools

    Since D3 outputs standard markup, you can use familiar dev tools and inspectors to debug your visual ...

  9. php实现 24点游戏算法

    php实现 24点游戏算法 一.总结 一句话总结:把多元运算转化为两元运算,先从四个数中取出两个数进行运算,然后把运算结果和第三个数进行运算,再把结果与第四个数进行运算.在求表达式的过程中,最难处理的 ...

  10. Android Studio查看android源码

    Android Studio的默认版本在/Applications/Android Studio.app/Contents/info.plist中设置,默认没有1.8.如下: <key>J ...