Özet
join [-a dosya_numarası | -v dosya_numarası] [-e dizge] [-o liste] [-t karakter] [-1 alan] [-2 alan]
dosya1 dosya2
Açıklama
join yardımcı programı, belirtilen dosyalar üzerinde bir “eşitlik birleştirmesi” (equality join) gerçekleştirir ve sonucu standart çıktıya yazar. “Birleştirme alanı” (join field), her bir dosyada dosyaların karşılaştırılacağı alandır. Varsayılan olarak her satırdaki ilk alan kullanılır. Çıktıda, dosya1 ve dosya2 içindeki eşleşen (özdeş) birleştirme alanlarına sahip her satır çifti için bir satır bulunur. Her çıktı satırı; birleştirme alanından, ardından dosya1'den kalan alanlardan ve daha sonra dosya2'den kalan alanlardan oluşur.
Varsayılan alan sınırlayıcıları sekme (tab) ve boşluk karakterleridir. Bu durumda, birden fazla sekme ve boşluk tek bir alan sınırlayıcı olarak sayılır ve baştaki sekme ile boşluklar yoksayılır. Varsayılan çıktı alan sınırlayıcısı tek bir boşluk karakteridir.
Seçeneklerin birçoğu dosya ve alan numaralarını kullanır. Hem dosya numaraları hem de alan numaraları 1 tabanlıdır, yani komut satırındaki ilk dosya dosya numarası 1'dir ve ilk alan alan numarası 1'dir. Aşağıdaki seçenekler kullanılabilir:
-a dosya_numarası Varsayılan çıktıya ek olarak, dosya_numarası numaralı dosyadaki eşleştirilemeyen her satır için bir satır üretir.
-e dizge Boş çıktı alanlarını dizge ile değiştirir.
-o liste -o seçeneği, eşleşen birleştirme alanlarına sahip her satır için her dosyadan hangi alanların çıktı olarak verileceğini belirtir. Listenin her bir öğesi ya dosya_numarası.alan biçimindedir (burada dosya_numarası bir dosya numarası ve alan bir alan numarasıdır) ya da birleştirme alanını temsil eden ‘0’ (sıfır) biçimindedir. Listenin öğeleri virgül (‘,’) veya boşlukla ayrılmalıdır. (İkincisi, kabuktan korumak için tırnak içine almayı gerektirir; veya daha basit bir yaklaşım, birden fazla -o seçeneği kullanmaktır.)
-t karakter Hem girdi hem de çıktı için alan sınırlayıcı olarak karakter karakterini kullanır. Bir satırdaki karakter karakterinin her bir oluşumu önemlidir.
-v dosya_numarası Varsayılan çıktıyı görüntülemez, ancak dosya_numarası numaralı dosyadaki eşleştirilemeyen her satır için bir satır görüntüler. -v 1 ve -v 2 seçenekleri aynı anda belirtilebilir.
-1 alan Dosya1'in alan'ıncı alanına göre birleştirir.
-2 alan Dosya2'nin alan'ıncı alanına göre birleştirir.
Varsayılan alan sınırlayıcı karakterler kullanıldığında, birleştirilecek dosyalar, birleştirilecekleri alanlar üzerinde sort(1)'un -b seçeneği kullanılarak sıralama düzenine göre sıralanmalıdır; aksi takdirde join tüm alan eşleşmelerini raporlamayabilir. Alan sınırlayıcı karakterler -t seçeneği ile belirtildiğinde, sıralama düzeni -b seçeneği olmadan sort(1) ile aynı olmalıdır.
Argümanlardan biri (dosya1 veya dosya2) ‘-’ ise, standart girdi kullanılır.
Çıkış Durumu
join yardımcı programı başarı durumunda 0, bir hata oluşursa >0 değeriyle çıkar.
Örnekler
İlk Nobel Barış Ödülü sahiplerinden bazılarının bilgilerini içeren nobel_laureates.txt adında bir dosya olduğunu varsayalım:
1901,Jean Henri Dunant,M
1901,Frederic Passy,M
1902,Elie Ducommun,M
1905,Baroness Bertha Sophie Felicita Von Suttner,F
1910,Permanent International Peace Bureau,
ve uyruklarını içeren nobel_nationalities.txt adında ikinci bir dosya olsun:
Jean Henri Dunant,Switzerland
Frederic Passy,France
Elie Ducommun,Switzerland
Baroness Bertha Sophie Felicita Von Suttner
Özel bir alan sınırlayıcı belirterek, ilk dosyadan ikinci sütunu ve ikinci dosyadan varsayılan ilk sütunu kullanarak iki dosyayı birleştirin:
$ join -t, -1 2 nobel_laureates.txt nobel_nationalities.txt
Jean Henri Dunant,1901,M,Switzerland
Frederic Passy,1901,M,France
Elie Ducommun,1902,M,Switzerland
Baroness Bertha Sophie Felicita Von Suttner,1905,F
Boş alanları değiştirmek için ‘<<NULL>>’ kullanarak yalnızca ödül sahibinin yılını ve uyruğunu gösterin:
$ join -e "<<NULL>>" -t, -1 2 -o "1.1 2.2" nobel_laureates.txt nobel_nationalities.txt
1901,Switzerland
1901,France
1902,Switzerland
1905,<<NULL>>
Yalnızca ilk dosyada bulunup ikinci dosyada eşleşmesi olmayan satırları gösterin:
$ join -v1 -t, -1 2 nobel_laureates.txt nobel_nationalities.txt
Permanent International Peace Bureau,1910,
Aşağıdaki içeriğe sahip capitals.txt adında bir dosya olduğunu varsayalım:
Belgium,Brussels
France,Paris
Italy,Rome
Switzerland
Ödül sahibinin doğduğu ülkenin adını ve başkentini gösterin. Bu örnek nobel_nationalities.txt dosyasını bir köprü olarak kullanır ancak o dosyadan herhangi bir bilgi göstermez. Ara sonucu neden sıralamamız gerektiğini anlamak için yukarıdaki sort(1) hakkındaki nota da bakın.
$ join -t, -1 2 -o 1.2 2.2 nobel_laureates.txt nobel_nationalities.txt | \
sort -k2 -t, | join -t, -e "<<NULL>>" -1 2 -o 1.1 2.2 - capitals.txt
Elie Ducommun,<<NULL>>
Jean Henri Dunant,<<NULL>>
Uyumluluk
join yardımcı programının geçmiş sürümleriyle uyumluluk için aşağıdaki seçenekler mevcuttur:
-a: Varsayılan çıktıya ek olarak, hem dosya1 hem de dosya2 içindeki eşleştirilemeyen her satır için bir satır üretir.
-j1 alan Dosya1'in alan'ıncı alanına göre birleştirir.
-j2 alan Dosya2'nin alan'ıncı alanına göre birleştirir.
-j alan Hem dosya1 hem de dosya2'nin alan'ıncı alanına göre birleştirir.
-o liste ... join yardımcı programının geçmiş uygulamaları -o seçeneği için birden fazla argümana izin veriyordu. Bu argümanlar, mevcut -o seçeneği için açıklanan dosya_numarası.alan_numarası biçimindeydi.
-o seçeneği.: Bu, 1.2 adındaki dosyaların varlığında bariz zorluklara yol açar.
Bu seçenekler yalnızca geçmiş kabuk betiklerinin değişiklik gerektirmemesi için mevcuttur ve kullanılmamalıdır.
Ayrıca Bakınız
awk(1), comm(1), paste(1), sort(1), uniq(1)
Standartlar
join komutu IEEE Std 1003.1-2001 (“POSIX.1”) standardına uygundur.
macOS 26.4 20 Haziran 2020 macOS 26.4