Linux'ta wc Komutu Nasıl Kullanılır

Yayınlanan: 2022-07-23
Bir bash istemi gösteren Linux dizüstü bilgisayar
fatmawati achmad zaenuri/Shutterstock.com

Bir dosyadaki satır, sözcük ve bayt sayısını saymak yararlıdır, ancak Linux wc komutunun gerçek esnekliği diğer komutlarla çalışmaktan gelir. Hadi bir bakalım.

wc komutu nedir

wc komutu küçük bir uygulamadır. Temel Linux yardımcı programlarından biridir, dolayısıyla yüklemeye gerek yoktur. Zaten Linux bilgisayarınızda olacak.

Ne yaptığını birkaç kelimeyle anlatabilirsiniz. Bir dosyadaki veya dosya seçimindeki satırları, sözcükleri ve baytları sayar ve sonucu bir terminal penceresinde yazdırır. Ayrıca girdisini STDIN akışından alabilir, yani işlemesini istediğiniz metin buna iletilebilir. Burası wc gerçekten değer katmaya başladığı yer.

Linux'ta Borular Nasıl Kullanılır
İLGİLİ Linux'ta Borular Nasıl Kullanılır

“Bir şeyi yap ve onu iyi yap” Linux mantrasının harika bir örneğidir. Borulu girişi kabul ettiği için çok komutlu büyülerde kullanılabilir. Göreceğimiz gibi, bu küçük bağımsız yardımcı program aslında harika bir takım oyuncusu.

wc kullanmamın bir yolu, pişirdiğim karmaşık bir komutta veya takma adda yer tutucu olarak kullanmaktır. Tamamlanan komutun yıkıcı olma ve dosyaları silme potansiyeli varsa, genellikle wc gerçek, tehlikeli komut için yedek olarak kullanırım.

Bu şekilde, komutun geliştirilmesi sırasında her dosyanın beklediğim gibi işlendiğine dair görsel geri bildirim alıyorum. Sözdizimiyle boğuşurken kötü bir şey olma ihtimali yok.

wc kadar basit, bilmeniz gereken birkaç küçük tuhaflık var.

Wc'ye Başlarken

wc kullanmanın en basit yolu, bir metin dosyasının adını komut satırına iletmektir.

 wc lorem.txt 

Bir uzun metin satırı içeren bir dosyayla wc kullanma

Bu, wc dosyayı taramasına ve satırları, sözcükleri ve baytları saymasına ve bunları terminal penceresine yazmasına neden olur.

Sözcükler boşlukla sınırlandırılmış herhangi bir şey olarak kabul edilir. Gerçek bir dilden kelimeler olup olmadıkları önemsizdir. Bir dosya "frd g lkj" dışında hiçbir şey içermiyorsa, yine de üç kelime olarak sayılır.

Satırlar, bir satır başı veya dosyanın sonu ile sonlandırılan karakter dizileridir. wc bir satır başı veya dosyanın sonu ile karşılaşana kadar satırın editörünüzde veya terminal penceresinde dolanması önemli değil, hala aynı satır.

İlk örneğimiz dosyanın tamamında bir satır buldu. İşte “lorem.txt” dosyasının içeriği.

 kedi lorem.txt 

Bir uzun satırlı dosyanın içeriği

Tüm bunlar tek bir satır olarak sayılır çünkü satır başı yoktur. Bunu başka bir dosya olan “lorem2.txt” ile ve wc bunu nasıl yorumladığıyla karşılaştırın.

 wc lorem2.txt
 kedi lorem2.txt 

Çok satırlı bir dosya ile wc kullanma

Bu sefer wc 15 satır sayar çünkü belirli noktalarda yeni bir satır başlatmak için metne satır başları eklenmiştir. Ancak, içinde metin bulunan satırları sayarsanız, yalnızca 12 satır olduğunu görürsünüz.

Diğer üç satır, dosyanın sonundaki boş satırlardır. Bunlar yalnızca satır başı iadelerini içerir. Bu satırlarda metin olmamasına rağmen yeni bir satır başlatılmıştır ve wc onları bu şekilde sayar.

wc istediğimiz kadar dosya aktarabiliriz.

 wc lorem.txt lorem2.txt 

wc'yi iki dosya ile kullanma

Her bir dosyanın istatistiklerini ve tüm dosyaların toplamını alırız.

Açıkça adlandırılmış dosyalar yerine eşleşen dosyaları seçebilmemiz için joker karakterler de kullanabiliriz.

 wc *.txt *.? 

wc'yi joker karakterlerle kullanma

Komut Satırı Seçenekleri

Varsayılan olarak wc , her dosyadaki satırları, sözcükleri ve baytları görüntüler. -l (satırlar) -w (kelimeler) ve -c (baytlar) seçeneklerini kullanmakla aynıdır.

 wc lorem.txt
 wc -l -w -c lorem.txt 

Wc'yi satırlar, kelimeler ve bayt seçenekleriyle kullanma

Hangi şekil kombinasyonunu görmek istediğimizi belirleyebiliriz.

 wc -l lorem.txt

wc -w lorem.txt

wc -c lorem.txt

wc -l -c lorem.txt 

Opsiyon kombinasyonları ile wc kullanımı

-c (bytes) seçeneği ile oluşturulan son şekle özellikle dikkat edilmelidir. Birçok insan bunu karakterleri saymakla karıştırıyor. Aslında bayt sayar. Karakter sayısı ve bayt sayısı aynı olabilir. Ama her zaman değil.

Şimdi “unicode.txt” adlı bir dosyanın içeriğine bakalım.

 kedi unicode.txt 

Latin olmayan bir karakter içeren bir dosyanın içeriği

Üç kelime ve Latin alfabesi olmayan bir karaktere sahiptir. wc dosyayı varsayılan bayt ayarıyla işlemesine izin vereceğiz ve bunu tekrar yapacağız ancak karakterleri -m (karakterler) seçeneğiyle talep edeceğiz.

 wc unicode.txt
 wc -l -w -m unicode.txt 

Bir dosyadaki baytları sayma ve ardından aynı dosyadaki karakterleri sayma

Karakterlerden daha fazla bayt var.

Dosyanın hex dökümüne bir göz atalım ve neler olduğunu görelim. hexdump komutunun -C (kurallı) seçeneği, dosyadaki baytları, satırın sonunda gösterilen düz ASCII eşdeğeri (varsa) ile 16 satırda görüntüler. Karşılık gelen ASCII karakteri yoksa, bir nokta “ . ” yerine gösterilir.

 hexdump -C unicode.txt 

Latin olmayan bir karaktere sahip kısa bir dosyanın onaltılık dökümü

ASCII'de, 0x20 bir onaltılık değer bir boşluk karakterini temsil eder. Soldan üç değer sayarsak, sonraki değerin bir boşluk karakteri olduğunu görürüz. Yani bu ilk üç değer 0x62 , 0x6f ve 0x79 "boy" içindeki harfleri temsil eder.

0x20 üzerine atladığımızda, başka bir üç onaltılık değer kümesi görüyoruz: 0x63 , 0x61 ve 0x74 . Bunlar "kedi" kelimesini heceler. Bir sonraki boşluk karakterini atladığımızda, "köpek" içindeki harfler için üç değer daha görüyoruz. Bunlar 0x64 , 0x5f ve 0x67 .

"Köpek" kelimesinin hemen arkasında bir boşluk karakteri 0x20 ve beş onaltılık değer daha görebiliriz. Son ikisi satır başıdır, 0x0a .

Diğer üç bayt, yeşille işaretlediğimiz Latin olmayan karakteri temsil ediyor. Bu bir Unicode karakteridir ve onu kodlamak için üç bayt gerekir. Bunlar 0xe1 , 0xaf ve 0x8a .

Bu yüzden neyi saydığınızı bildiğinizden ve baytlar ile karakterlerin aynı olması gerekmediğinden emin olun. Genellikle, baytları saymak daha faydalıdır çünkü size dosyanın içinde gerçekte ne olduğunu söyler. Karakterlerle saymak, dosyanın içeriğiyle temsil edilen şeylerin sayısını verir.

İLGİLİ: ANSI ve Unicode Gibi Karakter Kodlamaları Nelerdir ve Nasıl Farklılar?

Bir Dosyadan Dosya Adları Alma

wc dosya adları sağlamanın başka bir yolu var. Dosya adlarını bir dosyaya koyabilir ve o dosyanın adını wc iletebilirsiniz. Dosyayı açar, dosya adlarını çıkarır ve komut satırından geçirilmiş gibi işler. Bu, yeniden kullanım için rastgele bir dosya adı koleksiyonu saklamanıza izin verir.

Ama bir sorun var ve bu büyük bir şey. Dosya adları boş sonlandırılmalıdır, satır başı sonlandırılmamalıdır. Diğer bir deyişle, her dosya adından sonra normal satır başı baytı 0x0a yerine 0x00 boş bir baytı olmalıdır.

Bu formatta bir düzenleyici açıp dosya oluşturamazsınız. Tipik olarak, bunun gibi dosyalar diğer programlar tarafından oluşturulur. Ancak, böyle bir dosyanız varsa, onu böyle kullanırsınız.

İşte dosya adlarını içeren dosyamız. Daha az açmak, boş bayt belirtmek için less less garip “ ^@ ” karakterlerini gösterir.

 daha az kaynak-dosya-listesi.txt 

Boş bayt içeren daha az dosya

Dosyayı wc ile kullanmak için --files0-from (girdiyi oku) seçeneğini kullanmamız ve dosya adlarını içeren dosyanın adını geçmemiz gerekiyor.

 wc ---files0-from=source-files-list.txt 

wc, boş sonlandırılmış dosya adlarının dosyasını işliyor

Dosyalar tam olarak komut satırında sağlanmış gibi işlenir.

Wc'ye Borulama Girişi

Girdiyi wc göndermenin çok daha yaygın, esnek ve üretken bir yolu, diğer komutların çıktısını wc aktarmaktır. Bunu echo komutu ile gösterebiliriz.

 echo "Bunu benim için sayın" | WC
 echo -e "Bunu benim için\nsayın" | WC 

Girdiyi wc'ye göndermek için yankı kullanma

İkinci echo komutu, “ \n ” satırsonu biçimlendirme kodu gibi kaçan dizilere izin vermek için -e (kaçan karakterler) seçeneğini kullanır. Bu, wc girişi iki satır olarak görmesine neden olan yeni bir satır enjekte eder.

İşte girdilerini birinden diğerine besleyen bir dizi komut.

 bul ./* -type f | devir | kes -d'.' -f1 | devir | sıralama | tek
  • find dosyaları ( type -f ) geçerli dizinden başlayarak özyinelemeli olarak arar. rev dosya adlarını tersine çevirir.
  • cut , alan sınırlayıcıyı bir nokta olarak tanımlayarak ilk alanı ( -f1 ) ayıklar “ . ” ve ters çevrilmiş dosya adının “ön” kısmından bulduğu ilk periyoda kadar okuma. Şimdi dosya uzantısını çıkardık.
  • rev , çıkarılan ilk alanı tersine çevirir.
  • sort , bunları artan alfabetik sıraya göre sıralar.
  • uniq , terminal penceresine benzersiz girişleri listeler.

Geçerli dizin ağacındaki benzersiz uzantıların listesi

Bu komut, geçerli dizindeki ve tüm alt dizinlerdeki tüm benzersiz dosya uzantılarını listeler.

uniq komutuna -c (sayım) seçeneğini ekleseydik, her uzantı türünün oluşumunu sayardı. Ancak kaç farklı, benzersiz dosya uzantısı olduğunu bilmek istiyorsak, satırdaki son komut olarak wc bırakıp -l (satırlar) seçeneğini kullanabiliriz.

 bul ./* -type f | devir | kes -d'.' -f1 | devir | sıralama | tek | wc -l 

Benzersiz uzantıları saymak için wc ekleme

İLGİLİ: Linux kesme Komutu Nasıl Kullanılır

Ve sonunda

İşte size wc yapabileceği son bir numara. Size bir dosyadaki en uzun satırın uzunluğunu söyleyecektir. Ne yazık ki, size hangi çizgi olduğunu söylemiyor. Sadece uzunluğu verir.

 wc -L taf.c 

wc ile bir dosyadaki en uzun satırın uzunluğunu alma

Yine de dikkatli olun, sekmeler sekiz boşluk olarak sayılır. Editörümde görüntülendiğinde, bu satırın başında üç adet iki boşluklu sekme var. Gerçek uzunluğu 124 karakterdir. Yani bildirilen rakam yapay olarak genişletildi.

Bu işlevi büyük bir tutam tuzla tedavi ederim. Ve bununla, onu kullanmayın demek istiyorum. Çıktısı yanıltıcıdır.

Tuhaflıklarına rağmen wc , yalnızca bir dosyadaki kelimeleri değil, her türlü değeri saymanız gerektiğinde boru komutlarına girmek için harika bir araçtır.

İLGİLİ: Bilmeniz Gereken 37 Önemli Linux Komutu