1

私たちのサプライヤーの1つは、バグのある製造現場システムを持っています(長い話は短いです)。彼らは彼らの側で何が悪いのかを修正しますが、私は彼らが送るファイルを分離する必要があります:それらは空ではありませんが、長い空の文字列を持っています。通常、適切なファイルはviでは次のようになります

    <insert_list><test_event_insert  endTime="2012-09-10T05:28:45" startTime="2012-09-10T05:27:41" operator="8176967"><process_step name="FVT" revision="NO DATA"></process_step><location1 name="CT" type="REGION"><location2 name="ONTREP1" type="TESTER"><location3 name="LineA" type="LINE"></location3></location2></location1><unit ...
"CT~DCA~FVT~8176967~ONTREP1~4~P~1100~DECA1MR0-01~XED1B1033A4675~20120910~052846.XML" [noeol][dos] 3L, 2170C

悪いファイルはこれに見えます:

^@^@^@^@^@^@^@^@^@^@^@^@^@...

"CT~DCA~FVT~8176967~ONTREP1~2~P~1100~DECA1MR0-01~XED1B1045B6072~20120904~043209.XML" [noeol] 1L, 2170C

カレット/アットマークの組み合わせは、VIによるその文字列の解釈ですが、実際には空の文字列です。使用-zは1つのファイルで機能するようです

X=CT~DCA~FVT~8176967~ONTREP1~2~P~1100~DECA1MR0-01~XED1B1045B6072~20120904~043209.XML
if [ ! -z $X ] 
then 
echo "$X empty"
else 
echo "$X not empty"
fi
    CT~DCA~FVT~8176967~ONTREP1~2~P~1100~DECA1MR0-01~XED1B1045B6072~20120904~043209.XML empty

しかし、同じコードは、EMCマスファイラー上の900個のファイルがすべて空であることを示しています。これは真実ではありません。

export OUT=/path/to/device
declare -a myArray
for f in "$OUT"/*ONTREP1*; do myArray+=( "${f#$OUT/}" ); done
for i in "${myArray[@]}"; do  if [ ! -z $i ] ; then echo "$i empty"; else echo "$i not empty"; fi; done

注意:パターン「ONTREP1」は、障害のあるファイルを1つの製造現場のコンピューター名に絞り込むことです。

私は何が欠けていますか?

4

1 に答える 1

2

文字列が空かどうかをテストするものがありませtest -z stringん(ファイルが空かどうかをテストするものとは対照的test -s fileです)。さらに、vimの^ @は、NULバイト(値が0のバイト)を示します。これらはバイナリデータのようです。ファイルまたは破損している可能性がありますが、確かに空ではありません。vimの空のファイルは、左端の列にすべてのチルダ(〜)として表示されます:-)

file filename良いファイルと悪いファイルでコマンドを実行してみてください。後者はおそらくNULバイトのために「データ」と言っています。

于 2012-09-11T16:57:10.387 に答える