man/text
man · Metin İşleme

$ join

Bölüm 1 · Metin İşleme

ilişkisel veritabanı operatörü

Ö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ı dizge ile 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 öğesi dosya_numarası.alan biçimindedir veya birleştirme alanını temsil eden 0 değ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 -o seçeneği kullanmaktır.
  • -t karakter: Hem girdi hem çıktı için alan sınırlayıcı olarak karakter kullanır. Satırdaki karakter değerinin her oluşumu önemlidir.
  • -v dosya_numarası: Varsayılan çıktıyı görüntülemez; bunun yerine 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 içindeki alan numaralı alana göre birleştirir.
  • -2 alan: dosya2 içindeki alan numaralı 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, hem dosya1 hem de dosya2 içindeki eşleştirilemeyen her satır için bir satır üretir.
  • -j1 alan: dosya1 içindeki alan numaralı alana göre birleştirir.
  • -j2 alan: dosya2 içindeki alan numaralı alana göre birleştirir.
  • -j alan: Hem dosya1 hem de dosya2 içindeki alan numaralı alana göre birleştirir.
  • -o liste ...: join aracının geçmiş uygulamaları -o 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. Bu durum 1.2 adlı 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.