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
@ Eroen Pengguna menyebutkan kecepatan dan efisiensi memori. Operasi python dan set sama sekali tidak.
—
Daniel Beck
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
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