0

これで、ファイルのリストを2つの別々の配列に配置するスクリプトができました。

まず、ZIPファイルからファイルリストを取得して入力しますFIRST_Array()。次に、ZIPファイル内の制御ファイルからファイルリストを取得し、SECOND_Array()それを入力します

while read length date time filename 
do
    FIRST_Array+=( "$filename" )
    echo "$filename" >> FIRST.report.out
done < <(/usr/bin/unzip -qql AAA.ZIP |sort -g -k12 -t~)

第三に、私は次のように両方の配列を比較します:

diff -q <(printf "%s\n" "${FIRST_Array[@]}") <(printf "%s\n" "${SECOND_Array[@]}") |wc -l

各配列をファイルに出力しているため、 Diff失敗していることがわかります。FIRST.report.outそしてSECOND.report.out、単に正しくソートされていません。

1)FIRST.report.out(ZIPファイルの内容)

JGS-Memphis~AT1~Pre-Test~X-BanhT~JGMDTV387~6~P~1100~HR24-500~033072053326~20120808~240914.XML JGS-Memphis~PRE~DTV_PREP~X-GuinE~JGMDTV069~6~P~1100~H24-700~033081107519~20120808~240914.XML JGS-Memphis~PRE~DTV_PREP~X-MooreBe~JGM98745~40~P~1100~H21-200~029264526103~20120808~240914.XML JGS-Memphis~FUN~Pre-Test~X-RossA~jgmdtv168~2~P~1100~H21-200~029415655926~20120808~240914.XML

2)SECOND.report.out(ZIPの制御ファイルの内容)

JGS-Memphis~AT1~Pre-Test~X-BanhT~JGMDTV387~6~P~1100~HR24-500~033072053326~20120808~240914.XML JGS-Memphis~FUN~Pre-Test~X-RossA~jgmdtv168~2~P~1100~H21-200~029415655926~20120808~240914.XML JGS-Memphis~PRE~DTV_PREP~X-GuinE~JGMDTV069~6~P~1100~H24-700~033081107519~20120808~240914.XML JGS-Memphis~PRE~DTV_PREP~X-MooreBe~JGM98745~40~P~1100~H21-200~029264526103~20120808~240914.XML

ファイルの日付フィールド(12番目の位置)の区切り文字であるため、sort -k12 -t~意味のあるものを使用します。~しかし、それは一貫して機能していません。追加-gしても違いはありません。

スクリプトがより大きなZIPファイルを処理する場合、ソートはさらに悪くなります。sort -kが常に機能しないのはなぜですか?両方の配列を並べ替えるにはどうすればよいですか?

4

2 に答える 2

0

データに実際にはk12が含まれておらず、仕様ではセパレータは「〜」ですが、データには〜が含まれている場合もあります。

あなたはによってチェックすることができます

head -n 1 your.data.file |  sed -e "s/~/\n/g" 
于 2012-08-08T21:48:50.407 に答える
0

ビジネス要件は変更されます。この場合、ソートは不要になりました。スレッドを閉じることができます。ありがとうございました。

于 2012-08-08T23:53:59.873 に答える