【发布时间】:2011-08-05 19:35:21
【问题描述】:
问题:
在使用函数对数组进行操作之前需要对数组进行排序。
首先,数组加载文件:
unset a i
counter=1
while IFS= read -r -d $'\0' file; do
a[i++]="$file"
done < <(find $DIR -type f -print0)
接下来,数组的每个成员都被发送到函数
for f in "${a[@]}"
do
func_hash "$f"
[ $(expr $counter % 20) -eq 0 ] && printf "="
counter=$((counter + 1))
done
在上面的 for 循环中需要以某种方式进行排序。看过 通过排序数组的SO帖子,但不知何故我疯狂的文件名 当我尝试进行排序时会导致问题。
想法?
谢谢!
布布诺夫
更新:这是带有排序的代码:
while IFS= read -r -d $'\0' file; do
func_hash "$file"
[ $(expr $counter % 20) -eq 0 ] && printf "="
counter=$((counter + 1))
done < <(find $DIR -type f -print0 | sort -z +1 -1)
它是按完整路径而不是文件名排序的。关于如何的任何想法 考虑到函数需要路径,按文件名排序?
更新 2:决定妥协。
我的主要目标是避免使用排序的临时文件。 GNU sort 可以写回原来的 带有'-o'选项的文件,所以现在我可以:
sort -o $OUT -t',' -k 1 $OUT
任何人都有更“优雅”的解决方案(无论这意味着什么)。
已解决请参阅下面的 jw013 的答案。谢谢大佬!
【问题讨论】:
-
我们需要文件名和所需的排序顺序(捕获一些常规和所有异常情况的示例)。祝你好运。
-
您也没有链接到您尝试过的 SO 帖子。我的第一直觉是将
find输出通过管道传递到<()中的sort,这对时髦的文件不起作用吗? -
nhed - 不,它没有。我会再试一次并发布错误。
-
shellter - 带有空格和逗号的超长文件名。 Alpha 排序。
-
决定即时进行袋子分拣。已经决定做一个'sort -o'。想要避免 tmp 文件。接受建议。