使用awk比较两个文件的内容
干货记录
[Linux] 使用awk比较两个文件的内容
当需要比较文件A中存在的文件A和文件B,并删除文件B中也存在的行时,可以使用这个awk用法。
awk“{ if(ARGIND==1){ val[$0]} else { if(val中的$ 0)删除val[$ 0]} } END { for(I in val)print I } ' A B
使用awk同时处理多个文件,配合数组变量进行处理。
首先扫描文件A,将文件A中的每一行作为数组的键放入数组中
然后扫描文件B,确定B中的每一行是否存在于数组中,如果存在,就删除这个数组元素。
最后,在数组中统一打印密钥。
文件准备
创建两个文件,a.txt和b.txt,包含以下内容:
a.txt
b.txt
1-wfhune 2-chdamsbchj 3-uyr92 fiubkqw 5-cgvdnsb
2-djyv4-dvcahsgdb5-wvchdfyt
普通用法,整行对比
命令
diff a.txt b.txt
grep -f a.txt b.txt
grep -vf a.txt b.txt
解释
比较两个文件
从两个文件中获取行。
取文件B中但不在文件a中的行
结果
1,4c1,3 1-wfhune 2-chdamsbchj 3-uyr92 fiubkqw 5-cgvdnsb-2-djyv 4-dvcahsgdb
空的
2-djyv4-dvcahsgdb5-wvchdfyt
高级用法,每行关键部分对比
回头看这两个文件的内容,格式是x-yyyy。我们认为X是关键,yyyy是价值。现在我们只想比较X,而不是yyyy。
我该怎么办?
命令
grep-VF(cut-d-f1 a . txt)(卡特彼勒b.txt)
grep-VF(awk-F '-' ' { print $ 1 } ' a . txt)(cat b . txt)
解释
()用于命令嵌套。Cut -d -f1a.txt,其中参数-d用于定义分隔符,参数-f用于定义分段后要提取的文本段落数。例如,在这里将分隔符定义为“-”,并提取分段后的第一段文本。
用awk命令代替cut命令就可以了,效果一样。Awk的-F参数用于定义分隔符,printf $X提取X段的分段文本。
结果
4-dvcahsgdb
4-dvcahsgdb
内容来源网络,如有侵权,联系删除,本文地址:https://www.230890.com/zhan/107442.html