Вывести определенные строки из файла linux в соответствии с выводом diff - PullRequest
3 голосов
/ 22 декабря 2011

Я работаю на испытательном стенде, чтобы смоделировать какое-то оборудование.Каждая строка действует как тест-кейс.У меня есть следующее:

File-In -> MyModel -> File-out

У меня также есть файл-reference , что мой вывод должен совпадать.

В процессе разработки существует много несоответствий между выводом и ссылкой.Мне нужно знать номера строк, которые отличаются, а затем скопировать эти строки из File-In в File-In-Bugs Так что я могу запустить MyModel с ошибочными линиями для более быстрой отладки.

[Изменить] Пример для моих файлов

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

ССЫЛКИ файлы идентичнына правильный вывод, но ошибки могут привести к изменению одного или более шестнадцатеричных символов.В строках с ошибками File-In должен быть скопирован в новый файл File-In-Bugs.Надеюсь, это прояснит проблему.

То, что я сделал до сих пор, не так много.Я думаю, что трубы Linux могут быть полезны.

1 Ответ

1 голос
/ 22 декабря 2011
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.

НТН

...