$ cat data.txt
aaaaaa
aaaaaa
cccccc
aaaaaa
aaaaaa
bbbbbb
$ cat data.txt | uniq
aaaaaa
cccccc
aaaaaa
bbbbbb
$ cat data.txt | sort | uniq
aaaaaa
bbbbbb
cccccc
$
Hasil yang saya butuhkan adalah untuk menampilkan semua baris dari file asli menghapus semua duplikat (bukan hanya yang berturut-turut), sambil mempertahankan urutan pernyataan asli dalam file .
Di sini, dalam contoh ini, hasil yang sebenarnya saya cari adalah
aaaaaa
cccccc
bbbbbb
Bagaimana saya bisa melakukan uniq
operasi umum ini secara umum?
text-processing
uniq
Lazer
sumber
sumber
{ if (!seen[$0]++) print }
if
,print
, kurung, dan kawat gigi:awk '!seen[$0]++'
'!LarryWall[$0]++'
untuk semua awk peduli, tetapi "terlihat" membantu orang memahami program dengan lebih baik.john memiliki alat yang disebut
unique
:Untuk mencapai hal yang sama tanpa alat tambahan dalam satu commandline sedikit lebih kompleks:
nl
mencetak nomor baris di depan garis, jadi jika kitasort
/ diuniq
belakangnya, kita dapat mengembalikan urutan asli garis.sed
hanya menghapus nomor baris sesudahnya;)sumber
nl -ba -nrz data.txt | sort -k2 -u | sort | cut -f2
Saya lebih suka menggunakan ini:
cat -n
menambahkan nomor baris,sort --key=2.1 -b -u
mengurutkan pada bidang kedua (setelah nomor baris yang ditambahkan), mengabaikan baris awal, menjaga garis yang uniksort -n
mengurutkan dalam urutan numerik yang ketatcut -c8-
jauhkan semua karakter dari kolom 8 hingga EOL (mis. hilangkan nomor baris yang kami sertakan)sumber
Perl memiliki modul yang dapat Anda gunakan yang mencakup fungsi yang disebut
uniq
. Jadi jika Anda ave data Anda dimuat dalam array di Perl Anda cukup memanggil fungsi seperti ini untuk membuatnya unik, namun tetap mempertahankan urutan aslinya.Anda dapat membaca lebih lanjut tentang modul ini di sini: Daftar :: MoreUtils
sumber