File tersebut harus diurutkan terlebih dahulu. sort file | uniq -uakan menampilkan konsol untuk Anda.
ma77c
Saya pikir alasan sort file | uniqmenunjukkan semua nilai 1 kali adalah karena segera mencetak garis yang ditemuinya pertama kali, dan untuk pertemuan berikutnya, itu hanya melewatinya.
Ini tidak benar, saya pikir maksud Anda:uniq -u filea > fileb
Chris Seymour
1
Saya menyalin data dan menjalankannya dan bekerja: sort<filea.txt | uniq>fileb.txt. Mungkin Anda meninggalkan ekstensi. Saya menggunakan Mac OS X. Anda harus beralih dari yang filea.txtlainfileb.txt
kasavbere
Tidak perlu untuk pengalihan dengan sortdan apa gunanya perpipaan uniqketika Anda bisa melakukan sort -u file -o fileapa yang Anda lakukan adalah menghapus nilai duplikat yaitu Anda filebberisi 1,2,3,5,7OP hanya menginginkan baris unik yang 2,3dan dicapai oleh uniq -u fileekstensi File tidak memiliki apa-apa dengan itu, jawaban Anda salah.
Chris Seymour
12
Anda juga dapat mencetak nilai unik dalam "file" menggunakan catperintah dengan menyalurkan ke sortdanuniq
Jadi, alih-alih itu, jika Anda memiliki python (sebagian besar distro dan server Linux sudah memilikinya):
Dengan asumsi Anda memiliki file data di notUnique.txt
#Python
#Assuming file has data on different lines
#Otherwise fix split() accordingly.
uniqueData = []
fileData = open('notUnique.txt').read().split('\n')
for i in fileData:
if i.strip()!='':
uniqueData.append(i)
print uniqueData
###Another option (less keystrokes):
set(open('notUnique.txt').read().split('\n'))
Perhatikan bahwa karena baris kosong, set terakhir mungkin berisi string '' atau hanya spasi. Anda dapat menghapusnya nanti. Atau langsung saja menyalin dari terminal;)
#
FYI saja, Dari halaman Man uniq:
"Catatan: 'uniq' tidak mendeteksi baris yang berulang kecuali jika berdekatan. Anda mungkin ingin mengurutkan input terlebih dahulu, atau menggunakan 'sort -u' tanpa 'uniq'. Selain itu, perbandingan menghormati aturan yang ditentukan oleh 'LC_COLLATE'."
Salah satu cara yang benar, untuk memanggil dengan: # sort nonUnique.txt | uniq
Contoh run:
$ cat x
3
1
2
2
2
3
1
3
$ uniq x
3
1
2
3
1
3
$ uniq -u x
3
1
3
1
3
$ sort x | uniq
1
2
3
Sementara sortmembutuhkan waktu O (n log (n)), saya lebih suka menggunakan
awk '!seen[$0]++'
awk '!seen[$0]++'adalah singkatan dari awk '!seen[$0]++ {print}', print line (= $ 0) jika seen[$0]bukan nol. Dibutuhkan lebih banyak ruang tetapi hanya O (n) waktu.
uniqseharusnya baik-baik saja jika file Anda sedang / dapat diurutkan, jika Anda tidak dapat mengurutkan file karena alasan tertentu, Anda dapat menggunakan awk:
sort file | uniq -u
akan menampilkan konsol untuk Anda.sort file | uniq
menunjukkan semua nilai 1 kali adalah karena segera mencetak garis yang ditemuinya pertama kali, dan untuk pertemuan berikutnya, itu hanya melewatinya.Jawaban:
uniq
memiliki opsi yang Anda butuhkan:sumber
Gunakan sebagai berikut:
sumber
uniq -u filea > fileb
sort<filea.txt | uniq>fileb.txt
. Mungkin Anda meninggalkan ekstensi. Saya menggunakan Mac OS X. Anda harus beralih dari yangfilea.txt
lainfileb.txt
sort
dan apa gunanya perpipaanuniq
ketika Anda bisa melakukansort -u file -o file
apa yang Anda lakukan adalah menghapus nilai duplikat yaitu Andafileb
berisi1,2,3,5,7
OP hanya menginginkan baris unik yang2,3
dan dicapai olehuniq -u file
ekstensi File tidak memiliki apa-apa dengan itu, jawaban Anda salah.Anda juga dapat mencetak nilai unik dalam "file" menggunakan
cat
perintah dengan menyalurkan kesort
danuniq
cat file | sort | uniq -u
sumber
uniq -u membuatku gila karena tidak berhasil.
Jadi, alih-alih itu, jika Anda memiliki python (sebagian besar distro dan server Linux sudah memilikinya):
Dengan asumsi Anda memiliki file data di notUnique.txt
Perhatikan bahwa karena baris kosong, set terakhir mungkin berisi string '' atau hanya spasi. Anda dapat menghapusnya nanti. Atau langsung saja menyalin dari terminal;)
#FYI saja, Dari halaman Man uniq:
"Catatan: 'uniq' tidak mendeteksi baris yang berulang kecuali jika berdekatan. Anda mungkin ingin mengurutkan input terlebih dahulu, atau menggunakan 'sort -u' tanpa 'uniq'. Selain itu, perbandingan menghormati aturan yang ditentukan oleh 'LC_COLLATE'."
Salah satu cara yang benar, untuk memanggil dengan: # sort nonUnique.txt | uniq
Contoh run:
Spasi mungkin dicetak, jadi bersiaplah!
sumber
Sementara
sort
membutuhkan waktu O (n log (n)), saya lebih suka menggunakanawk '!seen[$0]++'
adalah singkatan dariawk '!seen[$0]++ {print}'
, print line (= $ 0) jikaseen[$0]
bukan nol. Dibutuhkan lebih banyak ruang tetapi hanya O (n) waktu.sumber
kamu bisa memakai:
ini mengurutkan data dan memfilter berdasarkan nilai unik
sumber
uniq -u < file
akan melakukan pekerjaan itu.sumber
uniq
seharusnya baik-baik saja jika file Anda sedang / dapat diurutkan, jika Anda tidak dapat mengurutkan file karena alasan tertentu, Anda dapat menggunakanawk
:awk '{a[$0]++}END{for(i in a)if(a[i]<2)print i}'
sumber
ini berhasil bagi saya untuk yang serupa. Gunakan ini jika tidak diatur. Anda dapat menghapus sortir jika sudah diatur
sumber
Saya merasa ini lebih mudah.
-u
singkatan unik.sumber
Ini yang pertama saya coba
Setelah melakukan cat -e all.sorted
Setiap baris kedua memiliki spasi tambahan :( Setelah menghapus semua spasi tambahan, ini berfungsi!
Terima kasih
sumber