根据 diff 输出打印 linux 文件中的特定行

发布于 2024-12-22 16:47:21 字数 1679 浏览 1 评论 0原文

我正在一个测试台上对一些硬件进行建模。每行都充当一个测试用例。我有以下内容:

文件输入 -->我的模型 --> 文件输出

我还有一个我的输出必须匹配的文件引用

在开发过程中,输出和参考之间存在许多不匹配的情况。我需要知道不同的行号,然后将这些行从 File-In 复制到 File-In-bugs 因此,我可以使用有问题的线路运行 MyModel,以便更快地进行调试。

[编辑] 我的文件输入示例

(实际工作负载有数百万行)

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

输出

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

参考文件与正确的输出相同,但错误可能会导致更改一个或多个十六进制字符。在存在错误的行中,应将 File-In 复制到新文件 File-In-bugs。我希望这能让问题更加清楚。

到目前为止我所做的并不多。我认为linux管道很有用。

I am working on a test bench to model some hardware. Each line acts as a test-case. I have the following:

File-In --> MyModel --> File-out

I also have a File-reference that my output must match.

When in development, many mismatches exist between the output and the reference. I need to know the line numbers that differ, then copy those lines from File-In to File-In-bugs
So I can run MyModel with the buggy lines for quicker debugging.

[Edit] Example for my files

INPUT (Actual workloads have millions of lines)

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

REFERENCE files are identical to the correct output, but bugs may lead to change one ore more hex characters. At lines with bugs, the File-In shall be copied to a new file, File-In-bugs. I hope this makes the problem more clear.

What I did so far is not much. I think linux pipes can be useful.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

楠木可依 2024-12-29 16:47:21
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

会做你想做的事。您可以通过许多其他方式做到这一点。

华泰

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

Will produce an output of only showing the lines that can be found only in File-out, but it won't provide line numbers. If you really need that in your output:

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

should work.

Update: answering the comment below:

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

Will do what you want. You can do it many other ways OTOH.

HTH

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文