Sonraki satır aynıysa satırı sil


15

Hangi sed / awk komutunu kullanabilirim? Sadece sort -utüm örnekleri kaldıracak

Giriş:

abc
abc
def
abc
abc
def

Beklenen çıktı:

abc
def
abc
def

Yanıtlar:


36

Yani ne uniqstandart komut içindir.

uniq your-file

uniqGNU gibi bazı uygulamaların uniqsize, bayt-bayt özdeş ( aynı veya 0 döndürür) yerine aynı olan ( strcoll()0 döndürür) sıralayan bir satır dizisinin ilkini vereceğini unutmayın . Bir baytı uygulamadan bağımsız olarak bayt karşılaştırmasına zorlamak için, yerel ayarı şununla zorlayabilirsiniz :memcmp()strcmp()uniqC

LC_ALL=C uniq your-file

7

Vim bunu güzel bir şekilde başarabilir:

:g/\v^(.*\n)\1/d

Veya vim'i komut satırı aracı olarak kullanmayı tercih ederseniz, bunu

vim file -c "g/\v^(.*\n)\1/d" -c "wq"

Bu şekilde, daha sonra vim'den çıkarak güreşmek zorunda kalmazsınız;)

Açıklama:

:g/

Bu normal ifadeyle eşleşen tüm satırlarda ...

\v^(.*\n)\1

Kendisinden sonra gelen herhangi bir satır ...

/d

d elete komutunu çalıştırın (geçerli satırı silin). -c "wq"Değişiklikleri kaydetmek ve çıkmak etmektir.


En azından vim 8.1.2112 ile, dosyanın son iki satırı olan yinelenen satırlar için çalışmadığını unutmayın. Ayrıca, yalnızca 3 kopya satırdan bir kopyayı kaldırır.
Stéphane Chazelas

1
@ StéphaneChazelas, şu anda 3 satırlık durumda istenen davranış için spesifikasyona sahip değiliz - istenen davranışı her iki şekilde de görebiliyordum.
D. Ben Knoble
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.