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