私たちのサプライヤーの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つの製造現場のコンピューター名に絞り込むことです。
私は何が欠けていますか?