Linux文本比较-diff&awk

最近为了完成工作,需要将两个文件A.old和A进行比较,然后将A中新增加的部分保存到A中,其他部分删除。经过查找相关资料,发现有两种比较好的方法。

1. 使用diff命令

diff old.file new.file | grep "^> " | sed s/> //g > temp.file #只存在于后面new.file文件中的内容保存到temp.file中
mv temp.file new.file # 将temp.file中的内容覆盖new.file
sed s/^> //g # s表示进行替换,意思是将以"> "开头的符号全部替换为""
sed s/要被替换的字符串/新的字符串/g 

 

2. 使用awk命令

awk NR==FNR{a[$0]}NR>FNR{if(!($1 in a)) print $0} old.file new.file > temp.file
mv temp.file new.file
awk内置变量
变量名称 代表意义
$0 代表一整行的数据
NF 每一行($0)拥有的字段总数
NR 目前awk所处理的是"第几行"数据
FS 目前的分割字符,默认是空格键

NR和FNR的区别

NR:当前记录数

FNR:当前文件的记录数,其作用域在一个文件内,重新打开文件,FNR重新从1开始。

两者的区别主要体现在awk操作文件数大于1时。

 

参考:http://bbs.chinaunix.net/thread-1155924-1-1.html

        http://bbs.chinaunix.net/thread-2309494-1-1.html

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。