簡體   English   中英

我如何在bash中對行進行排序?

[英]how do i sort lines in bash?

我的腳本無法對文件進行排序,目前存在一些問題。

該錯誤似乎已在此處本地化,在這里我對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.

您想要的是GNU排序調用的-V ,-- --version-sort

文本中自然的(版本)數字排序

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM