我现在有一个脚本,它将文件列表放在两个单独的数组中:
首先,我从一个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 (压缩包的控制文件中的内容)
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不能一直工作?如何对两个数组进行排序?
发布于 2012-08-09 05:48:50
你的数据中并没有真正的k12,你的规范中的分隔符是'~‘,但你的数据中有~,有时甚至是-。
您可以通过以下方式检查
head -n 1 your.data.file | sed -e "s/~/\n/g" 发布于 2012-08-09 07:54:00
业务需求将发生变化。在这种情况下,不再需要排序。线程可以关闭。谢谢。
https://stackoverflow.com/questions/11873427
复制相似问题