我现在有一个脚本,它将文件列表放在两个独立的数组中:
首先,我从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不能一直工作?如何对两个数组进行排序?
答案 0 :(得分:0)
你的数据中确实没有k12,你的分隔符在你的规范中是'〜',但你的数据中有〜,有时候。
你可以通过
查看head -n 1 your.data.file | sed -e "s/~/\n/g"
答案 1 :(得分:0)
业务需求将会发生变化。在这种情况下不再需要排序。线程可以关闭。谢谢。