これで、ファイルのリストを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が常に機能しないのはなぜですか?両方の配列を並べ替えるにはどうすればよいですか?