我如何在bash中排序?

时间:2016-12-19 14:25:22

标签: bash sorting

我目前在脚本没有排序文件方面遇到一些问题。

这里的错误似乎是本地化的,我对utt2spk文件进行了排序,就像这样做..

for x in test train; do
        for f in text utt2spk; do
            sort data/$x/$f -o data/$x/$f
        done
done

我有一个函数可以检查文件是排序还是重复。该函数检查如下:

function check_sorted_and_uniq {
  ! awk '{print $1}' $1 | sort | uniq | cmp -s - <(awk '{print $1}' $1) && \
    echo "$0: file $1 is not in sorted order or has duplicates" && exit 1;
}

并且它总是触发错误消息..

这个for循环的问题在于它没有正确排序数字。在这种情况下,我有文本

fkdo-b-cen6 fkdo
fkdo-b-cen7 fkdo
fkdo-b-cen8 fkdo
flrp-b-an2121 flrp
flrp-b-an21 flrp
flrp-b-an22 flrp
flrp-b-an23 flrp
flrp-b-an24 flrp
flrp-b-an25 flrp
flrp-b-cen1 flrp

应该是

fkdo-b-cen6 fkdo
fkdo-b-cen7 fkdo
fkdo-b-cen8 fkdo
flrp-b-an21 flrp
flrp-b-an22 flrp
flrp-b-an23 flrp
flrp-b-an24 flrp
flrp-b-an25 flrp
flrp-b-an2121 flrp
flrp-b-cen1 flrp

那么为什么不对它进行正确排序?以及如何正确排序?

如果这可以通过其他方式完成,那也没关系,我只需要能够在bash脚本中执行它。

sort --version
sort (GNU coreutils) 8.21
Copyright (C) 2013 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>.
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.

Written by Mike Haertel and Paul Eggert.

1 个答案:

答案 0 :(得分:0)

您想要的是GNU排序称为-V--version-sort

  

文本中自然的(版本)数字

因此,您只需要在sort -V …循环以及for中使用function check_sorted_and_uniq