Özet
join [-a dosya_numarası | -v dosya_numarası] [-e dizge] [-o liste] [-t karakter] [-1 alan] [-2 alan] dosya1 dosya2
Açıklama
join, belirtilen dosyalar üzerinde eşitlik birleştirmesi gerçekleştirir ve sonucu standart çıktıya yazar.
Birleştirme alanı, her dosyada karşılaştırmanın yapılacağı alandır. Varsayılan olarak her satırdaki ilk alan kullanılır.
Çıktıda, dosya1 ve dosya2 içindeki eşleşen 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 içindeki kalan alanlardan ve daha sonra dosya2 içindeki kalan alanlardan oluşur.
Varsayılan alan sınırlayıcıları sekme ve boşluk karakterleridir. Bu durumda birden fazla sekme ve boşluk tek bir alan sınırlayıcı olarak sayılır; baştaki sekme ve boşluklar yoksayılır. Varsayılan çıktı alan sınırlayıcısı tek boşluk karakteridir.
Seçeneklerin birçoğu dosya ve alan numaralarını kullanır. Dosya numaraları ve alan numaraları 1 tabanlıdır; komut satırındaki ilk dosya dosya numarası 1, ilk alan alan numarası 1 şeklindedir.
Argümanlardan biri, yani dosya1 veya dosya2, - ise standart girdi kullanılır.
Seçenekler
-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ıdizgeile değiştirir.-o liste: 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 öğesidosya_numarası.alanbiçimindedir veya birleştirme alanını temsil eden0değeridir. Liste öğeleri virgül veya boşlukla ayrılmalıdır. Boşluk kullanılırsa değer kabuktan korumak için tırnak içine alınmalıdır; daha basit bir yaklaşım birden fazla-oseçeneği kullanmaktır.-t karakter: Hem girdi hem çıktı için alan sınırlayıcı olarakkarakterkullanır. Satırdakikarakterdeğerinin her oluşumu önemlidir.-v dosya_numarası: Varsayılan çıktıyı görüntülemez; bunun yerinedosya_numarasınumaralı dosyadaki eşleştirilemeyen her satır için bir satır görüntüler.-v 1ve-v 2seçenekleri aynı anda belirtilebilir.-1 alan:dosya1içindekialannumaralı alana göre birleştirir.-2 alan:dosya2içindekialannumaralı alana göre birleştirir.
Sıralama
Varsayılan alan sınırlayıcı karakterleri kullanıldığında, birleştirilecek dosyalar birleştirme alanları üzerinde sort(1) aracının -b seçeneği kullanılarak sıralanmış olmalıdır. Aksi halde join tüm alan eşleşmelerini raporlamayabilir.
Alan sınırlayıcı karakter -t ile belirtilirse, sıralama düzeni -b seçeneği olmadan sort(1) ile aynı olmalıdır.
Çıkış Durumu
join, 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 adlı dosyanın şöyle 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,
Uyrukları içeren nobel_nationalities.txt adlı ikinci dosya:
Jean Henri Dunant,Switzerland
Frederic Passy,France
Elie Ducommun,Switzerland
Baroness Bertha Sophie Felicita Von Suttner
Özel alan sınırlayıcı belirterek, ilk dosyadan ikinci sütunu ve ikinci dosyadan varsayılan ilk sütunu kullanarak iki dosyayı birleştirmek:
join -t, -1 2 nobel_laureates.txt nobel_nationalities.txt
Örnek çıktı:
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östermek:
join -e "<<NULL>>" -t, -1 2 -o "1.1 2.2" nobel_laureates.txt nobel_nationalities.txt
Örnek çıktı:
1901,Switzerland
1901,France
1902,Switzerland
1905,<<NULL>>
Yalnızca ilk dosyada bulunup ikinci dosyada eşleşmesi olmayan satırları göstermek:
join -v1 -t, -1 2 nobel_laureates.txt nobel_nationalities.txt
Örnek çıktı:
Permanent International Peace Bureau,1910,
Aşağıdaki içeriğe sahip capitals.txt adlı 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östermek. Bu örnek nobel_nationalities.txt dosyasını köprü olarak kullanır, ancak o dosyadan bilgi göstermez. Ara sonucu neden sıralamak gerektiğini anlamak için yukarıdaki sort(1) notuna 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
Örnek çıktı:
Elie Ducommun,<<NULL>>
Jean Henri Dunant,<<NULL>>
Uyumluluk
join aracının geçmiş sürümleriyle uyumluluk için aşağıdaki seçenekler mevcuttur:
-a: Varsayılan çıktıya ek olarak, hemdosya1hem dedosya2içindeki eşleştirilemeyen her satır için bir satır üretir.-j1 alan:dosya1içindekialannumaralı alana göre birleştirir.-j2 alan:dosya2içindekialannumaralı alana göre birleştirir.-j alan: Hemdosya1hem dedosya2içindekialannumaralı alana göre birleştirir.-o liste ...:joinaracının geçmiş uygulamaları-oiçin birden fazla argümana izin veriyordu. Bu argümanlar mevcut-oseçeneği için açıklanandosya_numarası.alan_numarasıbiçimindeydi. Bu durum1.2adlı dosyaların varlığında belirgin 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, IEEE Std 1003.1-2001 ("POSIX.1") standardına uygundur.