【问题标题】:comparing memory and data content using awk使用 awk 比较内存和数据内容
【发布时间】:2012-09-18 01:17:18
【问题描述】:

我有两个文件,第一个字段包含内存,第二个字段包含数据

文件 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

谢谢,

光辉

【问题讨论】:

  • 您能否详细说明示例文件中的更多输入和预期输出?
  • @JaypalSingh:我发明了一些输入来简化测试:-)

标签: awk gawk


【解决方案1】:

使用GNU awk 查找字符串0x60008798

awk '/^0x60008798$/ && FNR==NR { value=$1; data=$2; next } { if ($1 == value) printf ($2==data) ? "MATCH\n" : "NO MATCH\n" }' file1.txt file2.txt

假设:

  • 两个文件中没有重复的内存值。
  • 您只关心某件事是否匹配。
  • 即如果找不到两个匹配的值(每个文件中的一个),则不会生成任何输出。

【讨论】:

    【解决方案2】:

    请编辑您的帖子以包含您所需的输出。同时,这是使用 std unix untilty comm 的替代解决方案。发送man comminfo comm 以了解更多信息。

    comm -3 <(sort file1) <(sort file2 )
    0x11111111 0000
            0x22222222 1111
    0x60006590 9116
            0x60006590 9666
    0x60008814 3111
            0x60008814 3666
            0x99999999 1234
    

    我们已经对这两个文件进行了排序,因此它们按字母顺序排列

    comm -3 过滤输出的第 3 列,即 找到的任何匹配项。

    剩下的是第一个文件和第二个文件之间的区别,已排序。

    编辑

    或者看看哪些值是一样的,排除comm输出的前2列:

    comm -12 <(sort file1) <(sort file2 )
    0x60004942 4443
    0x60008798 4567
    0x60009912 3457
    

    IHTH

    【讨论】:

      【解决方案3】:
      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
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2017-08-05
        • 2012-10-31
        • 2011-09-25
        • 2023-03-13
        • 1970-01-01
        • 1970-01-01
        • 2011-05-05
        相关资源
        最近更新 更多