如果不能正常显示,请查看原文 , 或返回

找出两文件中相同的行,两文件不同的行,文件1有文件2没有的行_Java_ysdaniel的专栏-CSDN博客

删除两文件中相同的行,列出两个文件中不同的行:

cat 09-07_as_route 09-14_as_route | sort | uniq -u | sort -n -

awk '{print}' 09-07_as_route 09-14_as_route | sort | uniq -u | sort -n 

注: 这两个文件09-07_as_route  09-14_as_route 都是排序去重后处理过的。

 

找出文件文件209-14_as_route)中有,文件109-07_as_route)中没有的那些行

awk 'NR==FNR{a[$0]=1}NR>FNR{if(a[$0]!=1)print}' 09-07_as_route 09-14_as_route

或:

grep -vf 09-07_as_route 09-14_as_route

grep -wvf 09-07_as_route 09-14_as_route

解释:

NR==FNR{a[$0]=1}这句的意思是读取第一个参数(文件)内容,把里面的内容存到a变量中,并赋值为1
NR>FNR{if(a[$0]!=1)print}这句就是读取第二个参数(文件)内容,如果文件内容在a数组里面没有值,那么就打印!

 

找出文件1和文件2中相同的行

cat 09-07_as_route 09-14_as_route | sort | uniq -d | sort -n

grep -f 09-07_as_route 09-14_as_route 或 grep -f 09-14_as_route 09-07_as_route 

也可以使用comm,但使用comm比较的结果不准。????

可参考:http://blog.csdn.net/shuckstark/article/details/7872176

comm - 12     就只显示在两个文件中都存在的行;

comm - 23    只显示在第一个文件中出现而未在第二个文件中出现的行;

comm - 123  则什么也不显示。

例如:找出a.txt文件有而b.txt文件中没有的放在c.txt文件中

[cpp] view plaincopy #!/bin/sh  

# author by tianmo  

# date 2011-11-21 20:33  

#BEGIN  

cat a.txt | sort | uniq | sort > a_u.txt  

cat b.txt | sort | uniq | sort > b_u.txt  

comm -23  a_u.txt  b_u.txt > c.txt  

# END  

awk 用法例举:

变量名 含义

ARGC 命令行变元个数

ARGV 命令行变元数组

FILENAME 当前输入文件名

FNR 当前文件中的记录号

FS 输入域分隔符,默认为一个空格

RS 输入记录分隔符

NF 当前记录里域个数

NR 到目前为止记录数

OFS 输出域分隔符

ORS 输出记录分隔符

NF是域的个数 

$NF 是输出最后一个域的内容

NR和FNR的不同

NR:表示当前记录数

FNR:也表示当前记录数,但是FNR的作用域只在一个文件内.如果重新打开文件,FNR会从1开始.

 

返回