2 alana sahip bir CSV dosyanız olduğunu varsayalım: Kimlik ve e-posta. 2 alanlı başka bir dosyanız var: e-posta ve ad. Her üç alanın e-postaya katıldığı bir dosyayı nasıl oluşturabilirsiniz?
2 alana sahip bir CSV dosyanız olduğunu varsayalım: Kimlik ve e-posta. 2 alanlı başka bir dosyanız var: e-posta ve ad. Her üç alanın e-postaya katıldığı bir dosyayı nasıl oluşturabilirsiniz?
Yanıtlar:
Revizyon3 :
E-postadaki her iki listeyi de alfabetik olarak sıralamanız ve ardından katılmanız gerekir. E-posta alanının dosya1'in 2. alanı ve dosya2'nin 1. alanı dikkate alındığında:
sort -t , -k 2,2 file1.csv > sort1.csv
sort -t , -k 1,1 file2.csv > sort2.csv
join -t , -1 2 -2 1 sort1.csv sort2.csv > sort3.csv
parametre anlamı
-t,: ',' alan ayırıcıdır -k 2,2: 2. alanda karakter sıralama -k 1,1: 1. alanda karakter sıralama -1 2: dosya 1, 2. alan -2 1: dosya 2, 1. alan >: dosyaya çıktı
üretir
E-posta, kimliği, adı E-posta, kimliği, adı ...
e-posta ile alfabetik olarak sıralanmıştır.
Her iki dosyada da herhangi bir e-posta eksikse, sonuçlardan çıkarılamayacağını unutmayın.
Belki çok fazladır, ancak iki tür tablo olarak bir veritabanına (örneğin OpenOffice Base) içe aktarabilir ve istenen çıktı olan bir rapor tanımlayabilirsiniz.
CSV içe aktarma sorunu varsa, bir elektronik tablo programı (örn. OpenOffice Calc) içe aktarma yapabilir. Sonuç daha sonra kolayca veritabanına aktarılabilir.
Gelecekte referans olarak AWK ile oynamaya başlamak isteyebilirsiniz . Her * nix sisteminde bir şekilde var olan çok basit küçük bir betik dilidir ve tek görevi hayatın standart sınırlandırılmış metin veritabanlarının manipülasyonudur. Birkaç satırlık komut dosyasıyla çok yararlı şeyler yapabilirsiniz. Dil küçük ve zariftir ve bildiğim her şeyden daha iyi bir yarar / karmaşıklık oranına sahiptir.
Go kullanın: https://github.com/chrislusf/gleam
package main
import (
"flag"
"os"
"github.com/chrislusf/gleam"
"github.com/chrislusf/gleam/source/csv"
)
var (
aFile = flag.String("a", "a.csv", "first csv file with 2 fields, the first one being the key")
bFile = flag.String("b", "b.csv", "second csv file with 2 fields, the first one being the key")
)
func main() {
flag.Parse()
f := gleam.New()
a := f.Input(csv.New(*aFile))
b := f.Input(csv.New(*bFile))
a.Join(b).Fprintf(os.Stdout, "%s,%s,%s\n").Run()
}
CSV Cruncher'ı deneyin .
CSV dosyalarını SQL tabloları olarak alır ve SQL sorgularına izin vererek başka bir CSV veya JSON dosyası oluşturur.
Davanız için sadece şunu arayabilirsiniz:
crunch -in tableA.csv tableB.csv -out output.csv \
"SELECT tableA.id, tableA.email, tableB.name
FROM tableA LEFT JOIN tableB USING (email)"
Araç için Java 8 veya üzeri gerekir.
Avantajlardan bazıları:
join
Bazlı çözümlerin kullanımı ve anlaşılması daha kolaydır .Feragatname: Bu aracı yazdım. Google Code kapatıldıktan sonra kargaşa içindeydi, ancak onu yeniden canlandırdım ve kullandığım yeni özellikler ekledim.
CSV dosyasını LibreOffice gibi bir elektronik tablo programıyla okuyabilir ve VLOOKUP()
ikinci dosyada adı aramak için makro kullanabilirsiniz .
Ayrıca https://filerefinery.com adresinde bulunan gibi csv dosyalarına katılmak için özel olarak tasarlanmış bir araç da kullanabilirsiniz.
Şu anda desteklediğimiz işlemler şunlardır: csv dosyalarına katılma. Dış, iç, sol ve sağ birleştirme işlemlerinin SQL eşdeğerini iki csv dosyasında gerçekleştirmek mümkündür. Her bir dosyada birleştirme anahtarı olarak kullanılacak sütun yapılandırılabilir.