2016-04-08 14 views
2

numaralı dizinin içindeki yinelemeleri kaldırın, bunun mümkün olup olmadığını merak ediyordum.awk - Bir dizgeyi alfabetik olarak sıralayın ve buradaki

Dosyam:

CCDDBBAA 
EFGHAC 
KJLDFU 
ABBAAC 

İstenilen çıktı:

ABCD 
ACEFGH 
DFJKLU 
ABC 

Ben alfabetik Dosyamda dizeleri sıralamak ve dize içinde çiftleri elemek istiyoruz.

Teşekkürler!

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

boşluk çıkarın ve bir yeni satır her karakter ayrı: Bu sizin için işe yarayabilecek

cevap

0

perl:

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

veya yakut: GNU awk 4. * karakterleri içine rekor sorted_in için ve bölme ile

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

(GNU & tür sed). Oluşturulan satırları kopyaları kaldırarak sıralayın. Girilen yeni satırları kaldırın.

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 
    }' 
+0

İyi ama biraz daha açıklayabileceğinizi düşünüyorum - kabuk komutlarını çalıştırmak için "e" GNU 'sed' uzantısını kullanıyorsunuz ve orijinal yeni satırlar otomatik olarak" sed "tarafından korunur. –

1

null:

$ 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 
+1

Teşekkürler. Cevabı değiştirdi. – 7171u

0

FS olan gawk'da ile