我有两个文件包含第一个字段中的内存和第二个
中包含的数据文件1:
0x60008798 4567
0x60009912 3457
0x60008814 3111
0x60006590 9116
0x60004942 4443
0x11111111 0000
文件2:
0x60008798 4567
0x60009912 3457
0x60008814 3666
0x60006590 9666
0x60004942 4443
0x22222222 1111
我想检查对于给定的内存值(即第一个字段),两个文件中的数据(即第二个字段)是否匹配。
我试图找出如何使用awk,但解释的案例太复杂了。有人可以帮忙吗?
一种替代方案是我使用grep,或者我可能编写C代码,但我认为我可以使用awk
我的要求:内存应该在任一文件中都有相同的数据......这些内存和数据包含在不同点的内存中,它们应该匹配,如果没有,我会抛出错误。 我自己找到了一个解决方案 awk'BEGIN {while(getline<“file1”){arr [$ 1] = $ 2}} {if(arr [$ 1]!= $ 2){print $ 0}}'file2
谢谢,
特加斯
答案 0 :(得分:1)
使用0x60008798
找到字符串GNU awk
:
awk '/^0x60008798$/ && FNR==NR { value=$1; data=$2; next } { if ($1 == value) printf ($2==data) ? "MATCH\n" : "NO MATCH\n" }' file1.txt file2.txt
这假定:
答案 1 :(得分:1)
请编辑您的帖子以包含您所需的输出。与此同时,这是使用std unix tillty comm
的替代解决方案。请man comm
或info comm
了解详情。
comm -3 <(sort file1) <(sort file2 )
0x11111111 0000
0x22222222 1111
0x60006590 9116
0x60006590 9666
0x60008814 3111
0x60008814 3666
0x99999999 1234
我们已经按照alpha顺序对这两个文件进行了排序
comm -3
过滤第3列输出,即
找到的任何匹配项目。
第一个文件和第二个文件之间的区别是什么,已排序。
修改
要查看哪些值相同,请排除comm
输出的前两列:
comm -12 <(sort file1) <(sort file2 )
0x60004942 4443
0x60008798 4567
0x60009912 3457
IHTH
答案 2 :(得分:0)
file1val=$(awk -v addr=$addr '$1 == addr {print $2}' File1)
file2val=$(awk -v addr=$addr '$1 == addr {print $2}' File2)
if [ "$file1val" = "$file2val" ]
then echo match
else echo no match
fi