GNU/Linux >> Belajar Linux >  >> Linux

Hapus Garis Berdasarkan Duplikat Dalam Satu Kolom Tanpa Urutkan?

Saya memiliki file 3-kolom besar (~ 10.000 baris) dan saya ingin menghapus baris ketika konten kolom ketiga dari baris itu muncul di kolom ketiga dari baris lain. Ukuran file agak rumit, dan saya tidak dapat menggunakan kode seperti di bawah ini karena seluruh baris tidak identik; hanya isi kolom 3.

awk '!seen[$0]++' filename

Jawaban yang Diterima:

Ubah saja perintah awk Anda ke kolom yang ingin Anda hapus baris duplikatnya berdasarkan kolom itu (dalam kasus Anda kolom ketiga):

awk '!seen[$3]++' filename

Perintah ini memberitahu awk garis mana yang akan dicetak. Variabel $3 menampung seluruh isi kolom 3 dan tanda kurung siku adalah akses array. Jadi, untuk setiap kolom ketiga dari baris dalam nama file, simpul dari array bernama seen bertambah dan baris akan dicetak jika konten dari simpul tersebut(kolom3) bukan (! ) yang telah ditetapkan sebelumnya.

Di atas akan berfungsi jika kolom Anda dalam file input dibatasi dengan Spasi/Tab, jika itu adalah hal lain, Anda harus memberi tahunya untuk awk dengan -F-nya pilihan. Jadi, misalnya jika kolom dibatasi dengan koma(, ) dan ingin menghapus baris berdasarkan kolom ketiga, gunakan perintah sebagai berikut:

awk -F',' '!seen[$3]++' filename

Linux
  1. Bagaimana Cara Menghapus Garis Duplikat Di Dalam File Teks?

  2. Menggabungkan Garis Berdasarkan Karakter Pertama Dari Baris Berikutnya?

  3. Bagaimana Cara Menghapus Duplikat Di .bash_history, Mempertahankan Pesanan?

  1. Hapus baris kosong dalam file teks melalui grep

  2. Linux mengurutkan file shell menurut kolom kedua?

  3. Daftar baris hanya dari satu file di DIFF

  1. Hapus file tanpa diminta

  2. Hapus N baris pertama dari file log aktif

  3. Menggunakan awk untuk menjumlahkan nilai kolom, berdasarkan nilai kolom lain