Belirli bir karakterin bir dosyada görünme sayısı nasıl hesaplanır?


18

Örneğin, tüm tırnak "işareti ( ) karakterlerini saymak istiyoruz ; Dosyalarda olması gerekenden daha fazla alıntı varsa endişeleniriz.

Örneğin:

cluster-env,"manage_dirs_on_root","true"
cluster-env,"one_dir_per_partition","false"
cluster-env,"override_uid","true"
cluster-env,"recovery_enabled","false"

Beklenen sonuçlar:

16


Bkz . Bir bash komut dosyasında eksik bir alıntı bulmanın en kolay yolu? eğer gerçekten bilmek istediğiniz şey buysa.
G-Man

Yanıtlar:


26

Şunlarla birleştirebilir tr(karakterleri çevirebilir veya silebilirsiniz) wc(kelimeleri, satırları, karakterleri sayın):

tr -cd '"' < yourfile.cfg | wc -c

( omplement içindeki -dtüm karakterleri seçin ve sonra karakterleri sayın.)c"c


20

grep yaklaşımı:

grep -o '"' file | wc -l
16 
  • -o - yalnızca eşleşen alt dizeleri çıktılar

Veya tek gawk ile :

awk -v RS='' -v FPAT='"' '{print NF}' file
16
  • RS='' - boş kayıt ayırıcı (satırsonu yerine)

  • FPAT='"' - alan değerini tanımlayan model


-o, standart grepyardımcı programın standart olmayan bir GNU uzantısıdır . İçin POSIX belgelerindegrep belirtilmemiştir .
Andrew Henle

4

Dosyadaki iki satırda tek sayıda çift tırnak işareti varsa, toplam çift tırnak toplamı eşit olur ve dengesiz tırnakları algılamazsınız (aslında yapmak istediğinizi varsayıyorum, ama yanlış olabilirim) ).

Bu awkkomut dosyası, giriş satırında tek tırnak işareti içeren herhangi bir satırı bildirir:

awk -F'"' 'NF % 2 == 0 { printf("Line %d has odd quoting: %s\n", NR, $0) }'

Biz saha ayırıcı (set FSiçin) "ile -F'"'bir çizgi alanlarının eşit sayıda varsa garip tırnak sahip olduğunu hangi yollarla. NFson kayıttaki NRalan sayısıdır ve geçerli kaydın sıra numarasıdır ("satır numarası").

Aşağıdaki girdi verildiğinde:

$ cat file
cluster-env,"manage_dirs_on_root","true"
cluster-env,"one_dir_per_partition","false"
cluster-env,override_uid","true"
cluster-env,recovery_enabled","false"

aldık

$ awk -F'"' 'NF % 2 == 0 { printf("Line %d has odd quoting: %s\n", NR, $0) }' file
Line 3 has odd quoting: cluster-env,override_uid","true"
Line 4 has odd quoting: cluster-env,recovery_enabled","false"

Gibi bir şey

$ grep -o '"' | wc -l

bu dosya için "14" değerini döndürür.



2

Saf BAŞ

var="$(< file.txt)"
tmp="${var//[^\"]/}"
echo ${#tmp}

tmpbir dizi? Evet ise tmp, bir dizi nedir?
Tim

@ Zaman, hayır. tmpbu pasajda normal bir kabuk değişkeni vardır. Ve bu cevabı küçümsüyorum çünkü bu, bir karakterin soruda belirtildiği gibi bir dosya yerine değişken ( var) içinde kaç kez göründüğünü sayar .
Joker

0

Deneyin:

grep -0 '"' File -c

ancak, aynı satırda iki veya daha fazla karakter varsa bu çalışmaz. Bunlar bir karakter olarak sayılır


1
U & L'ye hoş geldiniz! Bu aslında soruyu cevaplamıyor gibi görünüyor, çünkü karakterler yerine satırları sayacak. Etkili cevapları Yazma kuvvetle U & L teşvik edilmektedir - bkz cevaplama yardım merkezinde. Bunu geliştirmek isteyebilirsiniz.
fra-san


0

Eksantrik çift GNU grep yöntemi:

grep -o \" file | grep -c .
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.