← Bash tools
TEKNİK REHBER BASH TOOLS METİN İŞLEME 2026

cut, paste, column
alan seçimi ve biçimlendirme

Yapılandırılmış metin dosyalarında sütun seçmek ve yeniden düzenlemek için temel araçlar. cut sütunları keser, paste dosyaları yan yana yapıştırır, column düzgün hizalar.

00 Üç aracın rolü

CSV, TSV ve diğer yapılandırılmış metin dosyalarında sık kullanılan üç küçük araç — her biri bir işi mükemmel yapar.

cut
Her satırdan belirtilen alan veya karakter aralığını keser ve verir
paste
Birden fazla dosyanın satırlarını yatay olarak birleştirir (tabanlı JOIN)
column
Girdi satırlarını düzenli sütunlara hizalar, okunabilir tablo üretir
bash — hızlı örnek
# /etc/passwd'den kullanıcı adı ve kabuk sütunlarını çek
cut -d':' -f1,7 /etc/passwd | column -t -s':'

root        /bin/bash
daemon      /usr/sbin/nologin
www-data    /usr/sbin/nologin

01 cut: alan bazlı kesme (-f -d)

-f alan numaralarını, -d alan ayırıcıyı belirtir. Varsayılan ayırıcı TAB'dır.

bash
# CSV'den 2. alanı seç (varsayılan ayırıcı TAB)
cut -f2 dosya.tsv

# Virgül ayırıcı ile 1. ve 3. alan
cut -d',' -f1,3 data.csv

# Aralık: 2'den 5'e kadar (2-5 dahil)
cut -d':' -f2-5 /etc/passwd

# Açık aralık: 3'ten sona kadar
cut -d':' -f3- /etc/passwd

# Açık aralık: baştan 4'e kadar
cut -d':' -f-4 /etc/passwd

# Karmaşık seçim: 1, 3-5, 7. alanlar
cut -d',' -f1,3-5,7 data.csv

# Ayırıcı içermeyen satırları çıktıya dahil etme
cut -d',' -f2 -s data.csv  # ayırıcısız satırları atla
-f LIST
Alan listesi. Virgülle birden fazla, tire ile aralık: -f1,3-5,7
-d SEP
Alan ayırıcı (tek karakter). Varsayılan: TAB
-s
Ayırıcı içermeyen satırları bastırma (suppress)
--output-delimiter=STR
Çıktıdaki alan ayırıcı. Giriş ve çıkışı farklılaştırır
cut'ın SINIRI

cut alan sırasını değiştiremez. -f3,1 yazsanız da çıktı 1,3 sıralamasında gelir. Alan sırası değiştirmek için awk '{print $3, $1}' kullanın.

02 cut: karakter ve byte bazlı kesme

-c karakter konumuna, -b byte konumuna göre keser. Sabit-genişlikli dosyalar için idealdir.

bash
# Karakterlere göre: 1-10. karakterler
cut -c1-10 dosya.txt

# 5. karakterden sona kadar
cut -c5- dosya.txt

# Birden fazla aralık: 1-3 ve 8-10
cut -c1-3,8-10 dosya.txt

# Her satırın ilk karakterini sil (indent kaldır)
cut -c2- girintili.txt

# Byte bazlı (UTF-8 çok-baytlı karakterlerde -c tercih edilir)
cut -b1-4 binary.bin

# ls -l çıktısından izin bölümünü çek (sabit genişlik)
ls -l | cut -c1-10
-rw-r--r--
drwxr-xr-x
-c LIST
Karakter konumu. UTF-8'de çok-baytlı karakterleri doğru sayar
-b LIST
Byte konumu. UTF-8'de çok-baytlı karakterleri bölebilir

03 cut: tamamlayıcı seçim (--complement)

--complement seçili alanları değil, seçilmeyenleri verir — belirli sütunu atmak için kullanışlı.

bash
# 2. alan hariç hepsini ver (şifreyi gizle)
cut -d':' -f2 --complement /etc/passwd

# 1-3. alanlar hariç hepsi
cut -d',' -f1-3 --complement data.csv

# Çıktı ayırıcısını değiştir (virgülden sekmeye)
cut -d',' -f1,2,3 --output-delimiter=$'\t' data.csv

# CSV'yi TSV'ye dönüştür
cut -d',' -f1- --output-delimiter=$'\t' data.csv > data.tsv

04 paste: dosyaları yan yana yapıştır

paste birden fazla dosyanın satırlarını yatay olarak birleştirir — her dosyadan karşılıklı satırları yan yana koyar.

bash
# İki dosyayı yan yana yapıştır (TAB ayırıcı)
paste isimler.txt telefonlar.txt
Ali     0555-111-2233
Ayşe    0555-444-5566

# Ayırıcıyı değiştir (: ile)
paste -d':' isimler.txt telefonlar.txt

# Üç dosyayı virgülle yapıştır
paste -d',' ad.txt soyad.txt yas.txt > kişiler.csv

# Tek dosyayı N sütuna dönüştür (-s ardışık, sonra -d)
paste -s -d',' liste.txt      # satırları tek satıra topla
ali,ayşe,mehmet,fatma

# Sütun sayısını sınırla: 3'er grupla yan yana
paste - - - < liste.txt     # 3 sütun (- = stdin'den oku)

# Stdin'den: seq çıktısını 4 sütuna diz
seq 12 | paste - - - -
1	2	3	4
5	6	7	8
9	10	11	12
-d SEP
Alan ayırıcı. Birden fazla karakter: rotasyon uygular (örn: -d',-')
-s
Serial — her dosyanın satırlarını tek bir satıra koy
-
stdin'den oku (her - bir sütun)
JOIN vs PASTE

paste satır numaralarını eşleştirir — aynı satır numaralı satırları yan yana koyar. Belirli bir anahtara göre eşleştirme için join komutunu kullanın: join -t',' -1 1 -2 1 a.csv b.csv

05 column: sütunları hizala

column dağınık sütunlu metni okunabilir tabloya dönüştürür. Terminalde çıktı sunmak için idealdir.

bash
# Basit hizalama: boşlukla ayrılmış sütunları hizala
column -t dosya.txt

# Özel ayırıcı ile (: ile ayrılmış)
column -t -s':' /etc/passwd | head -10

# CSV'yi hizalı tabloya
column -t -s',' data.csv

# util-linux column (daha yeni): --table-header ile başlık vurgusu
column --table --separator ',' --table-header 'Ad,Soyad,Yaş' data.csv

# Satırları N sütuna diz (liste biçimi)
ls /usr/bin | column

# Sütun genişliğini belirt
column -c 80 liste.txt       # 80 karakter genişliğe göre sütunla

# Sık kullanım: ps çıktısını daha okunur yap
ps aux | column -t | head -10
-t
Tablo modu — sütunları boşluklarla hizalar (en çok kullanılan)
-s SEP
Girdi ayırıcı karakter(ler). Örn: -s',' veya -s':'
-c N
Terminal genişliği (satır başına N karakter)
--table
util-linux column: gelişmiş tablo modu
--separator STR
util-linux column: ayırıcı dizge
--table-header STR
util-linux column: başlık satırı sütun isimleri
İKİ FARKLI column

BSD column (macOS) ile util-linux column (Linux) arasında flag farkları var. --table, --separator, --table-header util-linux'a özgü. Taşınabilir kullanım için -t -s yeterli.

06 Pratik vakalar

Üç aracın gerçek dünya kombinasyonları.

bash — /etc/passwd'den kullanıcı raporu
# Kullanıcı adı, UID, home dizin (1, 3, 6. alanlar)
cut -d':' -f1,3,6 /etc/passwd \
  | column -t -s':'

root     0      /root
daemon   1      /usr/sbin
www-data 33     /var/www
bash — CSV sütun sırası değiştir
# cut alan sırası değiştiremez — awk kullan
awk -F',' 'BEGIN{OFS=","} {print $3,$1,$2}' data.csv

# Başlığı koru, veriyi yeniden sırala
head -1 data.csv
tail -n +2 data.csv | awk -F',' 'BEGIN{OFS=","} {print $3,$1,$2}'
bash — İki listeyi yan yana karşılaştır
# A sunucusu ve B sunucusu çalışan servisler
ssh serverA 'systemctl list-units --type=service --state=running | awk '"'"'{print $1}'"'"'' > a.txt
ssh serverB 'systemctl list-units --type=service --state=running | awk '"'"'{print $1}'"'"'' > b.txt

paste a.txt b.txt | column -t
nginx.service    nginx.service
mysql.service    postgresql.service
redis.service    memcached.service
bash — Log'dan IP ve yanıt süresi tablosu
# Nginx log: alan 1 = IP, alan 10 = yanıt süresi (μs)
awk '{print $1, $10}' access.log \
  | sort -k2 -rn \
  | head -20 \
  | column -t

192.168.1.45     985432
10.0.0.12        756123
172.16.5.100     543210

Hatırlanacaklar

  • cut -d',' -f2,4: CSV'den 2. ve 4. alanlar — sıra değişmez
  • cut -c5-: her satırın 5. karakterinden sona — indent kaldırmak için
  • --complement: belirtilen alanlar hariç hepsini ver
  • paste - - -: stdin'i 3 sütuna diz (her - bir sütun)
  • paste -s -d',': tüm satırları tek satırda birleştir
  • column -t -s':': kolon hizalama için en taşınabilir form
  • Alan sırası değiştirmek için awk '{print $3,$1,$2}'cut bunu yapamaz

Devam: tr, wc — karakter dönüşümü ve sayma · sort, uniq — sıralama ve tekilleştirme · grep, sed, awk — metin işleme üçlüsü