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同时也给出所有指定文件的总统计数.字是由空格字符区分开的最大字符串. 该命令各选 ...
随机推荐
- 一个简单RPC框架是怎样炼成的(II)——制定RPC消息
开局篇我们说了,RPC框架的四个核心内容 RPC数据的传输. RPC消息 协议 RPC服务注冊 RPC消息处理 以下,我们先看一个普通的过程调用 class Client(object): def _ ...
- 【Cocos2d-x 017】 多分辨率适配全然解析
转:http://blog.csdn.net/w18767104183/article/details/22668739 文件夹从Cocos2d-x 2.0.4開始,Cocos2d-x提出了自己的多分 ...
- jquery的图片轮播 模板类型
先说一下用到的几个重要的事件 j jQuery on()方法是官方推荐的绑定事件的一个方法. $(selector).on(event,childSelector,data,function,map) ...
- POJ3622 Gourmet Grazers(FHQ Treap)
Time Limit: 3000MS Memory Limit: 65536K Total Submissions: 2363 Accepted: 881 Description Like s ...
- BZOJ2002: [Hnoi2010]Bounce 弹飞绵羊(LCT)
Description 某天,Lostmonkey发明了一种超级弹力装置,为了在 他的绵羊朋友面前显摆,他邀请小绵羊一起玩个游戏.游戏一开始,Lostmonkey在地上沿着一条直线摆上n个装置,每个装 ...
- Spider_selenium
json模块 什么是json? javascript中的对象和数组 对象:{key:value}取值:对象名.key 数组:[...,...]取值:数组[索引值] 作用 json格式的字符串和Pyth ...
- amazeui学习笔记二(进阶开发4)--JavaScript规范Rules
amazeui学习笔记二(进阶开发4)--JavaScript规范Rules 一.总结 1.注释规范总原则: As short as possible(如无必要,勿增注释):尽量提高代码本身的清晰性. ...
- 12. ZooKeeper之Java客户端API使用—创建会话。
转自:https://blog.csdn.net/en_joker/article/details/78686649 客户端可以通过创建一个ZooKeeper(org.apache.zookeeper ...
- Redis-消费模式
一 . 两种模式简介 发布消息通常有两种模式:队列模式(queuing)和发布订阅模式(qublish-subscribe).队列模式中,consumers可以同时从服务端读取消息,每个消息纸杯其中一 ...
- Solr的关键特性
1.基于标准的开放接口:Solr搜索服务器支持通过XML.JSON和HTTP查询和获取结果. 2.易管理:Solr可以通过HTML页面管理,Solr配置通过XML完成. 3.可伸缩性:能够有效地复制到 ...