0

我现在有一个脚本,它将文件列表放在两个单独的数组中:

首先,我从一个 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

使用sort -k12 -t~有道理,因为~是文件日期字段的分隔符(第 12 位)。但它并不能始终如一地工作。添加-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 回答