2013-08-11 25 views
7

Sadece birden çok satırı olan bir file.txt dosyası var, dosyayı sıralamaksızın yinelenen satırları kaldırmak istiyorum. unix bash'da hangi komutu kullanabilirim? çıktının dosya.txt'daki aitunix bash içindeki bir metin dosyasındaki çift satırları nasıl silebilirim?

örnek

orangejuice;orange;juice_apple 
pineapplejuice;pineapple;juice_pineapple 
orangejuice;orange;juice_apple 

örnek:

orangejuice;orange;juice_apple 
pineapplejuice;pineapple;juice_pineapple 
+0

Bu da, mükerrer olarak kapalı görmek istiyorum, ancak, bağlantı için daha iyi bir soru var umuyoruz. – tripleee

cevap

14

Bunun için Perl kullanabilirsiniz:

perl -ne 'print unless $seen{$_}++' file.txt 

-n anahtarı dosyası satırı Perl işlemi yapar sırayla. Her bir satır ($_) "görülmektedir" adlı bir karma bir anahtar olarak depolanır, ancak ++ değeri döndükten sonra gerçekleşir, çünkü çizgisi karşılanmaktadır ilk kez basılır. awk kullanarak

+0

Bu, bir dosyaya çıktılandığında bir takma adda> output.txt boş bir dosya oluşturur? takma RDL = "perl -ne 'baskı $ sürece görülen {$ _} ++' cleanList.txt> cleanList2.txt" root @ server:/tmp # RDL postincrement anonim karma ({}) değiştirilemiyor (++) -e satırında 1, "} ++" yakınında Derleme yürütme hatalarından dolayı durduruldu. root @ server:/tmp # –

+0

Bu kediyi bul -n dosya_name | sıra -uk2 | sort -nk1 | https://stackoverflow.com/questions/11532157/unix-removing-duplicate-lines-without-sorting de -f2- kesilmiş –

+0

bir takma ad içinde 'uniq' komut çalışmaları bile http://man7.org/linux/man -pages/man1/uniq.1.html –

34

Tek yönlü:

awk '!a[$0]++' file.txt 
+0

Bunu bir dosyaya bashrc> output.txt kaynaklı bir takma ad ile yazamazsınız, sadece bir satırı var mı? –

+0

root @ server:/tmp # takma RDL = "awk cleanList.txt> cleanList2.txt 'bir [\ $ 0] ++!'" bash: Bir [\ $ 0] ++ ': kök bulunamadı olay @ sunucu: " '! \ a [$ 0] ++' awk cleanList.txt> cleanList2.txt" =/tmp # takma RDL'si kök @ mdserver:/tmp # RDL awk: cmd. satır: 1: \! a [bash] ++ awk: cmd. satır: 1:^backslash satırdaki son karakter değil root @ server:/tmp # alias RDL = "awk" \\! a [$ 0] ++ 'cleanList.txt> cleanList2.txt " ??? –

+0

Bu kediyi buldum -n dosya_adı | sıra -uk2 | sort -nk1 | cut -f2- https://stackoverflow.com/questions/11532157/unix-removing-duplicate-lines-without-sorting –

İlgili konular