我目前在脚本没有排序文件方面遇到一些问题。
这里的错误似乎是本地化的,我对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.
答案 0 :(得分:0)
您想要的是GNU排序称为-V
,--version-sort
文本中自然的(版本)数字
因此,您只需要在sort -V …
循环以及for
中使用function check_sorted_and_uniq
。