Що ви очікуєте після цього:
for /l %i in (1,1,100) do @more some.bbl | grep a | md5sum
Швидше за все, не це:
ec3ecb76408d4225ff23a25d0596e00f *-
13cfd899b90b9cd7aedb406a785e8eac *-
737e8898a65657f1a2ce8012ff1ffe82 *-
d4095243e56a7da3b31a352423a5417a *-
319db7810e677414ca1609238bdeba6f *-
31e626a8ce0732fda1fa7499c8b13dfa *-
006fe390f923d50348d65d0bbefa64d8 *-
77708f62cb2d61a45788a656d0979aee *-
cda10a9ab71c2bce4df069c479241349 *-
b01b71dc7dca11808ca989c4985513ca *-
c22a6f8b1cac9a93c4fe10b07a9f483a *-
0b04f4b24f3f183270eb7414f4f86e3d *-
5a2f8b8ad482ae8f70b7ce3384a7c9e2 *-
beccdbe737b48c02b48c4524cd89eede *-
a16fec5238cfe8dfff6b403ff943a8ca *-
ec0cd2edc0009abd14119915a8b563f4 *-
1e78f0012ca09aeade169f815415da40 *-
...
Я теж хвилювався, тому я провів пару перевірок здорового стану:
for /l %i in (1,1,100) do @more some.bbl | md5sum
врожайність в 100 разів
ace4f37f3a1433e29696a535c0b79f2c *-
Те саме для
for /l %i in (1,1,100) do @grep a some.bbl | md5sum
і
d8753d755025a1119cd2910c6f5cb0de *-
Отже more
, grep
і md5sum
добре працюйте самі. Також труба раніше md5sum
не є проблемою, оскільки
for /l %i in (1,1,100) do @more some.bbl | grep a > out%i
md5sum out*
підтверджує питання. fc
Що стосується результатів, я не знаходжу різниці. diff
Інфінг їх позначає невидимі відмінності, підтверджені шестигранним редактором, що це відмінності в закінченнях рядків у, здавалося б, випадкових місцях (і відрізняються від файлу до файла).
Проблема все ще спостерігається, але рідше - у цьому прикладі:
for /l %i in (1,1,100) do @more some.bbl | grep "[a-z]" | md5sum
врожайний
b135bcfe0bcfb7f1c43fe1905164c31e *-
b135bcfe0bcfb7f1c43fe1905164c31e *-
b135bcfe0bcfb7f1c43fe1905164c31e *-
b135bcfe0bcfb7f1c43fe1905164c31e *-
ef23817185d41987c11cb1fc4371bb76 *-
b135bcfe0bcfb7f1c43fe1905164c31e *-
b135bcfe0bcfb7f1c43fe1905164c31e *-
b135bcfe0bcfb7f1c43fe1905164c31e *-
e398e63b60cee3e271967f01350068f1 *-
b135bcfe0bcfb7f1c43fe1905164c31e *-
b135bcfe0bcfb7f1c43fe1905164c31e *-
b135bcfe0bcfb7f1c43fe1905164c31e *-
...
Зараз у мене не вистачає ідей, в чому може бути причина. Я б не переймався цим, якби не втрачав жодних дійсних рядків у таких випадках:
for /l %i in (1,1,100) do @more "some.bbl" | grep "\}$" | wc -l
Це дає
249
249
249
248
255
253
252
248
251
...
Для відтворення подібних проблем ви можете використовувати цей файл
for /l %i in (1,1,200) do @echo XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX{Something1999a}>> some.bbl
Ще трохи інформації
C:\>ver
Microsoft Windows [Version 6.1.7601]
C:\>more /h
Displays output one screen at a time.
MORE [/E [/C] [/P] [/S] [/Tn] [+n]] < [drive:][path]filename
...
C:\>grep --ver
GNU grep 2.6.3
Copyright (C) 2009 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.
C:\>md5sum --ver
md5sum (GNU coreutils) 8.15
Packaged by Cygwin (8.15-1)
Copyright (C) 2012 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>.
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.
Written by Ulrich Drepper, Scott Miller, and David Madore.
Чому це відбувається?
Оновлення: проблема також усувається, замінивши more
це cat
:
C:\>cat --ver
cat (GNU coreutils) 8.15
Packaged by Cygwin (8.15-1)
Copyright (C) 2012 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>.
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.
Written by Torbjörn Granlund and Richard M. Stallman.
more
. Однак я помітив, що в деяких випадках more | grep
це швидше, ніж grep
. У будь-якому випадку, чи не зовсім несуттєво, чому я використовую more
(а не cat
, чи grep
, або що інше) стосовно мого питання, Чому комбінація інструментів командного рядка поводиться недетерміновано?
more
очікує, що термінальний вхід в кінці екрана (коли вихід не буде перенаправлений), може заважати виводу? І явна випадковість, в основному, є результатом позиції у вікні віртуального терміналу? Це насправді може мати сенс.