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
| 变量名称 | 代表意义 |
| ARGC | 命令行变元个数 |
| ARGV | 命令行变元数组 |
| FILENAME | 当前输入文件名 |
| FNR | 当前文件中的记录号 |
| FS | 输入域分隔符,默认为一个空格 |
| RS | 输入记录分隔符 |
| NF | 当前记录里域个数 |
| NR | 到目前为止记录数 |
| OFS | 输出域分隔符 |
| ORS | 输出记录分隔符 |
| $0 | 代表一整行的数据 |
|
gsub(r,s)
|
在整个$0中用s代替r
|
|
gsub(r,s,t)
|
在整个t中用s替代r
|
|
index(s,t)
|
返回s中字符串t的第一位置
|
|
length(s)
|
返回s长度
|
|
match(s,r)
|
测试s是否包含匹配r的字符串
|
|
split(s,a,fs)
|
在fs上将s分成序列a
|
|
sprint(fmt,exp)
|
返回经fmt格式化后的exp
|
|
sub(r,s)
|
用$0中最左边最长的子串代替s
|
|
substr(s,p)
|
返回字符串s中从p开始的后缀部分
|
|
substr(s,p,n)
|
返回字符串s中从p开始长度为n的后缀部分
|
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
Linux文本比较-diff&awk的更多相关文章
- linux grep,sed,awk和diff的使用
1:grep//显示行 # grep 'main' /home/myhome/a.c//将a.c含有main的行显示出来 # grep -v 'main' /home/myhome/a.c //显示除 ...
- Linux实战教学笔记18:linux三剑客之awk精讲
Linux三剑客之awk精讲(基础与进阶) 标签(空格分隔): Linux实战教学笔记-陈思齐 快捷跳转目录: * 第1章:awk基础入门 * 1.1:awk简介 * 1.2:学完awk你可以掌握: ...
- 程序猿必知必会Linux命令之awk
前言 对于一名专业的程序员来说,Linux相关知识是必须要掌握的,其中对于文本的处理更是我们常见的操作,比如格式化输出我们需要的数据,这些数据可能会来源于文本文件或管道符,或者统计文本里面我们需要的数 ...
- 【linux】linux命令grep + awk 详解
linux命令grep + awk 详解 grep:https://www.cnblogs.com/flyor/p/6411140.html awk:https://www.cnblogs.com ...
- Linux下Diff命令
一般正常比较两个文件用vimdiff,算是直接进入vim界面,如果比较两个文件夹下面的文件,可以用diff,注意,这里只会比较文件夹下面的同名文件,他会列出不一样的点. 参考Linux下Diff命令使 ...
- (转)不看绝对后悔的Linux三剑客之awk实战精讲
原文:http://blog.51cto.com/hujiangtao/1923930 一.Linux三剑客之awk命令精讲 第1章 awk基础入门 1.1 awk简介 awk不仅仅时linux系统中 ...
- Linux下diff的操作详解
总述 Linux diff命令用于比较文件的差异.diff以逐行的方式,比较文本文件的异同处.特别是比较两个版本不同的文件,如果指定要比较目录,则diff会比较目录中相同文件名的文件,但不会比较其中子 ...
- day16 Linux三剑客之awk
day16 Linux三剑客之awk 1.什么是awk,主要作用是什么? 什么是awk,主要作用是什么? awk 主要用来处理文件,将文本按照指定的格式输出.其中包含变量,循环以及数组. 2.awk的 ...
- 磁盘分区 & Linux 三剑客之 awk
今日内容 磁盘分区 Linux 三剑客之 awk 内容详细 一.磁盘分区 磁盘分区 --> 挂载 步骤 1.关机 2.添加硬盘 3.创建分区 fdisk /dev/sdb or gdisk /d ...
随机推荐
- HTML——meta标签
<meta> 元素可提供有关页面的元信息(meta-information),比如针对搜索引擎和更新频度的描述和关键词. <meta> 标签位于文档的头部,不包含任何内容.&l ...
- java切换VPN让你像幽灵一样出现在全国各地
在很多情况下,有些网络应用的需求会要求模拟人在不同地区访问网站和应用.因而切换IP也就应运而生了,然而IP作为一种稀缺资源不是随便可以获得的.因而会想到应用程序切换VPN来达到全国不同地区访问网络.因 ...
- diff & pattch 命令
基础知识 该命令的功能为逐行比较两个文本文件,列出其不同之处.它比comm命令完成更复杂的检查.它对给出的文件进行系统的检查,并显示出两个文件中所有不同的行,不要求事先对文件进行排序. 语法:diff ...
- ASM:《X86汇编语言-从实模式到保护模式》第11章:进入保护模式
★PART1:进入保护模式 1. 全局描述符表(Global Descriptor Table,GDT) 32位保护模式下,如果要使用一个段,必须先登记,登记的信息包括段的起始地址,段的 ...
- tp5中的一些小方法
// 当使用一个新页面替换当前页面的body后,body刷新了,所选择的select值就不能保存住,解决方法如下: 作业题目<select> <option>--请选择--&l ...
- POJ 2965 The Pilots Brothers' refrigerator
题目链接 题意:一个冰箱上有4*4共16个开关,改变任意一个开关的状态(即开变成关,关变成开)时,此开关的同一行.同一列所有的开关都会自动改变状态.要想打开冰箱,要所有开关全部打开才行. 输入:一个4 ...
- Linux内核补丁升级
如果机器已经联网,直接利用包管理工具更新,需要注意的是现在3.0以上的内核引入了签名机制,需要导入签名的key,参考步骤如下: 1.导入keyrpm --import https://www.elre ...
- 通过颜色代码初始化UIColor
#define UIColorFromHEX(rgbValue) [UIColor \ colorWithRed:((float)((rgbValue & 0xFF0000) >> ...
- [Android Pro] linux下查看一个文件的属性(ls,lsattr,file,stat)
reference to : http://blog.chinaunix.net/uid-28458801-id-4615294.html 查看文件属性有多种方法,且这些方法中偏向不同,具体如下: 1 ...
- 数据存储--sqlite总结
SQLite SQLite(轻量级的数据库,关系型数据库) 辅助工具:Navicat Premium 等 原理:ios针对存储问题封装了sqlite数据库(c语言数据库). 1 app获取沙盒地址命名 ...