Saya menggunakan banyak grep awk sort di shell unix saya untuk bekerja dengan file teks kolom yang dipisahkan tab berukuran sedang (sekitar 10M-100M). Dalam hal ini shell unix adalah spreadsheet saya.
Tapi saya punya satu masalah besar, yaitu memilih catatan yang diberikan daftar ID.
Memiliki table.csv
file dengan format id\tfoo\tbar...
dan ids.csv
file dengan daftar id, hanya pilih catatan table.csv
dengan id yang ada di ids.csv
.
jenis /programming/13732295/extract-all-lines-from-text-file-based-on-a-given-list-of-ids tetapi dengan shell, bukan perl.
grep -F
jelas menghasilkan positif palsu jika id lebar variabel.
join
adalah utilitas saya tidak pernah tahu. Pertama-tama, ini membutuhkan pengurutan alfabet (file saya biasanya diurutkan secara numerik), tetapi bahkan kemudian saya tidak bisa membuatnya bekerja tanpa mengeluh tentang urutan yang salah dan melewatkan beberapa catatan. Jadi saya tidak suka itu. grep -f terhadap file dengan ^id\t
-s sangat lambat ketika jumlah id besar.
awk
rumit.
Apakah ada solusi bagus untuk ini? Adakah alat khusus untuk file yang dipisahkan tab? Fungsionalitas ekstra akan sangat disambut juga.
UPD: Dikoreksi sort
->join
awk
.
sort
dapat melakukan segala macam penyortiran, numerik, alfabet dan lainnya Lihat man sort
.
grep -f
terlalu lambat, mempertahankan strategi ini kedengarannya lebih banyak masalah daripada nilainya - variasi kemungkinan akan menjadi mangsa masalah kinerja O (N * M) yang sama. Mungkin waktu Anda akan lebih baik dihabiskan untuk belajar bagaimana menggunakan SQL DB yang dinormalisasi ...