Mendapatkan pelengkap dari dua file teks pada baris perintah Unix


1

Apakah ada utilitas berbasis Unix yang cepat (idealnya ditulis dalam C) untuk mendapatkan persimpangan streaming yang efisien / gabungan file teks yang dibatasi tab?

Misalnya, izinkan kueri seperti "beri saya semua entri yang ada di file A yang memiliki nilai kolom K yang tidak muncul di kolom K file B".

Misalnya, jika file A adalah:

bob sally sue
bob mary john

dan file B adalah:

john sally sue
foo bar quux

maka komplemen dari file A relatif ke B pada kolom 2 akan mengembalikan "bob mary john", karena hanya itu dalam file B yang memiliki nilai pada kolom 2 yang tidak muncul dalam file B.

Saya lebih suka tidak menggunakan database, tapi saya ingin utilitas berbasis command-line. Apakah AWK jawabannya atau ada sesuatu yang lebih sederhana?


Saya sarankan python; membaca file, membagi di whitespace ke daftar, menjadikannya satu set dan melakukan operasi set sebelum menulis.
Eroen

1
@ Eroen Pengguna menyebutkan kecepatan dan efisiensi memori. Operasi python dan set sama sekali tidak.
Daniel Beck

2
Halaman ini menjelaskan sejumlah operasi yang ditetapkan pada baris perintah unix. Saya tidak yakin bagaimana Anda ingin menjadi kolom Anda, tetapi jika tidak penting, skrip awk cepat akan menggabungkannya menjadi satu kolom.
Eroen

1
Saya sudah membaca pertanyaan Anda, tiga kali sekarang, bahkan contoh yang Anda berikan tidak banyak membantu saya. Saya telah melakukan penggabungan dan pencarian eksklusif pada kolom beberapa kali dengan AWK, tetapi, maaf tolong bantu saya untuk memahami masalah Anda. Misalnya "bob mary john" bukan kolom, itu baris, atau nilai kolom K, dan kolom K, tidak masuk akal bagi saya.
matematika

@math Bagian itu cukup mudah dipecahkan dengan hanya mentransposisi isi file B, dan kemudian membandingkan kolom sebagai gantinya. Saya bukan ninja awk, tetapi saya akan terkejut jika awk tidak dapat melakukan transposisi matriks.
Martin Frost
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.