2011-12-22 75 views
3

我正在測試臺上模擬某些硬件。每條線都是一個測試案例。我有以下幾點:根據差異輸出從linux文件打印特定行

文件,在 - >爲MyModel - >文件出

我也有一個文件引用我的輸出必須匹配。

在開發過程中,輸出和參考之間存在許多不匹配。我需要知道不同的行號,然後將這些行從文件中文件複製到文件漏洞 因此,我可以運行MyModel與buggy行以更快的調試。

[編輯]實施例用於我的文件

INPUT(實際的工作負載有上百萬的行)

100 000 0008EDF3FCFF3FCFF3FCFF3FCFF3342B 00084000000000000000000000507F1A 
100 000 0008F800000000000000000000000004 80074000000000000000000000420000 
101 000 0006C0000000000001A0308801C00000 0008E000000000000000000030A61108 
100 000 80020000088C00000000000000000000 8008EDF3FCFF3FCFF3FCFF3FCFF3FF9F 
100 000 00090413FCFF3FCFF3FCFF3FBE75EF5B 0006C0000000000014CB826109E00000 
101 000 000903B0000000000000001A9CC23829 000840000000000000006A7308E0A410 
101 000 00068000000000000000000C08000000 00090220000000000000000000000003 
100 000 800902A3FCFF762DE9F248E6F44B625F 9806A1404555A482BB52150248C00000 
100 000 0006C0005BE1D493AB588D1E49E00000 00094011E4FF3FCFE68E3CFC3C46251E 
100 000 8006C0017B35F0E248B64BC001000000 000940704000000095B6F470A2AB22E0 

OUTPUT

14088FF3FCFF3FCFF3FCFF3FCFF3FCFF 00000 
18088FF3FCFF3FCFF3FCFF3FCFF3FCFF 00000 
8C088FF3FCFF3FCFF3FCFF3FCFF3FCFF 00000 
94088FF3FCFF3FCFF3FCFF3FCFF3FCFF 00000 
10088DF3FCFF3FCFF3FCFF3FCFF3FCFF 00000 
640895F3FCFF3FCFF3FCFF3FCFF3FCFF 00000 
88088DF3FCFF3FCFF3FCFF3FCFF3FCFF 00000 
E00895F3FCFF3FCFF3FCFF3FCFF3FCFF 00000 
04088793FCFF3FCFF3FCFF3FCFF3FCFF 00000 
1C088093FCFF3FCFF3FCFF3FCFF3FCFF 00000 

參考文件是相同的,以正確的輸出,但缺陷可能會導致更改一個或多個十六進制字符。在有bug的行中,File-In應該被複制到一個新的文件中,即File-In-bugs。我希望這可以讓問題更清楚。

我到目前爲止所做的並不多。我認爲linux管道可以是有用的。

+2

您能否請張貼一些樣本數據? – 2011-12-22 09:08:53

+0

和預期的輸出格式。祝你好運。 – shellter 2011-12-22 22:47:57

回答

1
diff --old-line-format '%L' --new-line-format '' --unchanged-line-format '' File-out File-Reference 

將產生僅示出了只能在File-out中發現的線的輸出端,但它不會提供行號。如果你真的需要在你的輸出:

diff --old-line-format '%L' --new-line-format '' --unchanged-line-format '' <(nl File-out) <(nl File-Reference) 

應該工作。

更新:回答下面的評論:

diff --old-line-format '%L' \ 
    --new-line-format '' \ 
    --unchanged-line-format '' \ 
    <(nl File-out) <(nl File-ref) | \ 
awk '{print $1 "p"}' > BUGLINEPRINTER.sed && \ 
sed -n -f BUGLINEPRINTER.sed File-In > File-In-bugs 

會做你想要什麼。你可以用很多其他方式來做OTOH。

HTH

+0

我做了以下幾點:diff --old-line-format'%L'--new-line-format''--unchanged-line-format''<(nl File-out)<(nl File-ref) | awk'{print $ 1}'這會打印所有含有錯誤的行。現在,我該如何使用這些行號將文件複製到文件缺陷? – 2011-12-25 09:41:06

+1

查看我的更新回答。 – 2011-12-27 09:59:37

+1

謝謝,這完美地完成了這項工作。您的第一條更新後的行缺少'for the last awk =)非常感謝 – 2012-01-05 12:10:23