awk - 按字母顺序排序字符串并删除字符串

时间:2016-04-08 07:19:32

标签: bash awk

awk新手在这里,想知道这是否可行。

我的档案:

CCDDBBAA 
EFGHAC 
KJLDFU
ABBAAC

期望的输出:

ABCD
ACEFGH
DFJKLU
ABC

我想按字母顺序对文件中的字符串进行排序,并删除字符串中的重复项。

谢谢!

4 个答案:

答案 0 :(得分:1)

这可能适合你(GNU sed& sort):

sed 's/\s*/\n/g;s/.*/echo "&"|sort -u/e;s/\n//g' file

删除空格并用换行符分隔每个字符。对生成的行进行排序,删除重复项。删除引入的换行符。

答案 1 :(得分:1)

gawk:

 awk -v FS="" '{
    for(i=1;i<=NF;i++){
        if ($i in a == 0){
            a[$i]
        }
    };
    d=asorti(a,b);
    for(x=1;x<=d;x++){
        printf "%s",b[x]
    };
    print "";
    delete a;
    delete b
    }'

答案 2 :(得分:0)

perl的:

perl -pe '%x = map {$_=>1} split ""; $_ = join "", sort keys %x' file

或ruby:

ruby -pe '$_ = $_.chars.uniq.sort.join("")' file

答案 3 :(得分:0)

使用GNU awk 4. *表示sorted_in并在FS为空时将记录拆分为字符:

$ cat tst.awk
BEGIN { FS=OFS=ORS=""; PROCINFO["sorted_in"]="@ind_str_asc" }
{
    for (i=1;i<=NF;i++) a[$i]
    for (i in a) print i
    print RS
    delete a
}

$ awk -f tst.awk file
ABCD
ACEFGH
DFJKLU
ABC