X-zcer / PIT-with-RTS

0 stars 0 forks source link

(六十五)shell从一个文件去掉包含在另一个文件的内容 #66

Open X-zcer opened 5 years ago

X-zcer commented 5 years ago

grep -v -f file1 file2 

grep -f 另一个文件 -v -F -x 一个文件 -f 从文件中取得匹配模式,-v查找不符合匹配模式的内容,-F匹配原始字符串,而不是将其视为正则表达式,-x一行必须完全匹配 上面命令从一个文件中查找不在另一个文件中出现的字符串 comm -3 file1 file2 逐行比较两个排好序的文件,默认输出有三列:只在file1中有的行、只在file2中有的行、在file1和file2中共有的行。有参数-1 -2 -3,分别来抑制输出对应的列。例如在我们的方法二中,实用-3参数,不输出file1和file2中共有的部分; 但是逐行比较,就需要有序。它是对file1和file2进行逐行往下的比较,检测是否相同。

awk '{print NR, $0}' file1 file2 |sort -k2|uniq -u -f 1|sort -k1|awk '{print $2}' 或者: awk '{print $0}' file1 file2 |sort|uniq -u awk命令的使用,听牛人说可谓博大精深,我也没有太搞清楚。这里只是使用了一些简单的功能。下面以我自己的理解来解释一下上面的shell代码。awk就是文本的解释器和过滤器。awk把每一行看成是一个记录(record),每个记录使用分隔符(默认是空格)把每条记录分成若干域。awk内置参数$0表示整行,$1、$2...分别表示各域,内置参数NR,表示记录的计数,awk '{print NR, $0}' file1 file2表示依次读取file1 file2,打印出每行,并且在前面添加行号。 命令sort,就是对行进行排序,参数-k表示根据各行的第几个参数关键字开进行排序,这里的-k2表示根据第二个关键字开始进行排序。 命令uniq,进行报告或者忽略重复的行,参数-u,表示只是打印出唯一的行(unique lines),-f表示忽略的每行的前n个域的比较。