为什么sort -k不能一直工作?

时间:2012-08-08 21:25:56

标签: bash

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

首先,我从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.outSECOND.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不能一直工作?如何对两个数组进行排序?

2 个答案:

答案 0 :(得分:0)

你的数据中确实没有k12,你的分隔符在你的规范中是'〜',但你的数据中有〜,有时候。

你可以通过

查看
head -n 1 your.data.file |  sed -e "s/~/\n/g" 

答案 1 :(得分:0)

业务需求将会发生变化。在这种情况下不再需要排序。线程可以关闭。谢谢。