perl对比两个文件的行
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对比两个文件的行的更多相关文章
- Shell 命令行求两个文件每行对比的相同内容
Shell 命令行求两个文件每行对比的相同内容 遇到的一个实际问题是,2017年08月01日起,所有未经实名的域名,全部停止解析.而我手上有不少域名,其中很多都是没有实名的.但我不知道哪些实名了,哪些 ...
- Linux下对比两个文件夹的方法
最近拿到一份源代码,要命的是这份源代码是浅克隆模式的git包,所以无法完整显示里面的修改的内容. 今天花了一点点时间,找了一个在Linux对比两个文件夹的方法. 其实方法很简单,用meld 去对比两个 ...
- linux对比两个文件的差异
在项目维护阶段,经常会对垃圾文件进行清理.比如没有在数据库中的文件进行删除,这个时候最好的选择就是使用shell命令了:废话不多说直接上代码: 1.首先准备好从数据表导出来的数据,方法随意 2.在服务 ...
- Notepad++如何对比文件 Notepad++对比两个文件代码方法
大家在使用Notepad++的时候,需要对编辑的两个文件进行比较,找出两个文件代码的区别,快速进行编辑修改,那么Notepad++如何对比文件,下面小编就给大家带来Notepad++对比两个文件代码方 ...
- python对比两个文件问题
写一个比较两个文本文件的程序. 如果不同, 给出第一个不同处的行号和 列号. 比较的时候可以使用zip()函数 a=open('test.txt','r') b=open('test2.txt','r ...
- 【batch】命令对比两个文件夹下的文件(增删改的对比)
1.分别打印两个目录的结构 TREE D:\SOURCE /A /F >D:\SOURCE.TXT TREE D:\DEST /A /F >D:\DEST.TXT 2.然后使用工具/命令进 ...
- 如何使用UltraCompare对比两个文件夹内容差异
http://jingyan.baidu.com/article/cb5d6105e13599005c2fe0f8.html
- perl命令批量替换文件内容
转自:http://www.jbxue.com/article/12638.html 使用perl命令批量替换文件内容. 对linux下的文件内容进行替换,有时不用编写perl脚本,用perl命令就可 ...
- shell 统计某个文件的行数命令
语法:wc [选项] 文件- 说明:该命令统计给定文件中的字节数.字数.行数.如果没有给出文件名,则从标准输入读取.wc同时也给出所有指定文件的总统计数.字是由空格字符区分开的最大字符串. 该命令各选 ...
随机推荐
- SSO 中间件 kisso
SSO 中间件 kisso kisso = cookie sso,基于 Cookie 的 SSO 中间件.kisso 不是一套完整的登录系统, 它的定位是一把高速开发 java Web 单点登录系 ...
- D3.js加载csv和json数据
1.加载数据的基本命令 D3提供了方法可以对不同的数据类型进行加载,比如d3.text(), d3.xml(), d3.json(), d3.csv(), 和d3.html(). <!DOCTY ...
- java产生随机数的三种方式
转自:https://blog.csdn.net/YTTmiao/article/details/78187448 随机数在实际中使用很广泛,比如要随即生成一个固定长度的字符串.数字.或者随即生成一个 ...
- [Javascript AST] 0. Introduction: Write a simple BabelJS plugin
To write a simple Babel plugin, we can use http://astexplorer.net/ to help us. The plugin we want to ...
- eclipse-hierarchyviewer 不能使用
今天安装了adt-bundle以后,发现hierarchyviewer不能用.点开了以后连手机没有效果.后来发现,还需要进入hierarchyviewer所在的sdk目录进行下权限的设置 chmod ...
- gerrit-申请id跟本地配置
OpenID 是一个以用户为中心的数字身份识别框架,它具有开放.分散.自由等特性. 什么是gerrit? 看 了网上的介绍,感觉所谓的gerrit就是一个基于web实现代码管理的服务器.Gerrit ...
- Android学习笔记之网络接口(Http接口,Apache接口,Android接口)
目前Android平台有三种网络接口可以使用,他们分别是:Java.NET.*(标准Java接口),org.apache(Apache接口),和android.Net.*(android网络接口). ...
- vue实现一个会员卡的组件(可以动态传入图片(分出的一个组件)、背景、文字、卡号等)
自己在写这个组件的时候主要遇到的问题就是在动态传入背景图片或者背景色的时候没能立马顺利写出来,不过现在实现了这个简单组件就和大家分享一下 <template> <div class= ...
- Django的命令
安装django : pip install django 创建django项目 :django-admin startproject projectname 启动django项 ...
- eclipse中的乱码问题
在新建项目或导入工程时常常遇到的问题: 1.导入工程后,Java文件中文乱码 项目右键--Properties--Resource(快捷键Alt+Enter),在Text file encoding中 ...