2012-09-18 40 views
2

我有一個包含在包含在第二使用AWK

文件的第一字段和數據存儲器的兩個文件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 {而(函數getline < 「的file1」){ARR [$ 1] = $ 2}} {如果(ARR [$ 1] = $ 2!){打印$ 0}}' file2的

謝謝,

Tejas的

+0

能否請您與您的樣品中更多的投入闡述文件和預期的輸出? –

+0

@JaypalSingh:我發明了一些使測試更簡單的輸入:-) – Steve

回答

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

這是假設:

  • 這兩個文件中都沒有重複的內存值。
  • 你只關心是否匹配或不匹配。
  • 即,如果找不到兩個匹配值(每個文件一個),則不會生成輸出。
1

請修改您的帖子以包含您的輸出。同時,這是一個使用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濾波器輸出的第三列,這是 所發現的任何匹配的項目排序這兩個文件所以他們。

剩下的是第一個文件和第二個文件之間的區別,排序。

編輯

或者看到什麼樣的價值觀是相同的,排除comm輸出的第2列:

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

IHTH

+0

請參閱** edit **下的其他信息。祝你好運。 – shellter