Linux'ta wc Komutu Nasıl Kullanılır
Yayınlanan: 2022-07-23 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.
“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
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
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
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
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 *.?
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
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
-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
Üç 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
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
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
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
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
İ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.
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
İ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
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