Par exemple, nous voulons compter tous les caractères quote ( "
); nous nous inquiétons juste si les fichiers ont plus de citations qu'il ne devrait.
Par exemple:
cluster-env,"manage_dirs_on_root","true"
cluster-env,"one_dir_per_partition","false"
cluster-env,"override_uid","true"
cluster-env,"recovery_enabled","false"
Résultats attendus:
16
text-processing
Yael
la source
la source
Réponses:
Vous pouvez combiner
tr
(traduire ou supprimer des caractères) avecwc
(compter les mots, les lignes, les caractères):(
-d
supprimez tous les caractères dans lec
complément de"
, puis comptez les caractèresc
.)la source
approche grep :
-o
- sortie uniquement des sous-chaînes correspondantesOu avec un seul gawk :
RS=''
- séparateur d'enregistrement vide (au lieu de la nouvelle ligne)FPAT='"'
- modèle définissant la valeur du champla source
-o
est une extension GNU non standard de l'grep
utilitaire standard . Ce n'est pas mentionné dans la documentation POSIX pourgrep
.Si deux lignes du fichier ont un nombre impair de guillemets doubles, la somme totale des guillemets doubles sera paire et vous ne détecterez pas les guillemets asymétriques (c'est ce que je suppose que vous aimeriez réellement faire, mais je peux me tromper ).
Ce
awk
script signale toute ligne de la ligne d'entrée qui a un nombre impair de guillemets:Nous avons mis le séparateur de champ (
FS
) à"
avec ce-F'"'
qui signifie que si une ligne a un nombre pair de domaines , il a des citations étranges.NF
est le nombre de champs de l'enregistrement récent etNR
le nombre ordinal de l'enregistrement en cours ("le numéro de ligne").Étant donné l'entrée suivante:
on a
Quelque chose comme
retournerait "14" pour ce fichier.
la source
Une autre
gawk
approche unique :la source
BASH pur:
la source
tmp
un tableau? Si oui,tmp
est un tableau de quoi?tmp
dans cet extrait est une variable shell normale. Et je downvoting cette réponse parce que cela compte le nombre de fois qu'un caractère apparaît dans une variable (var
) plutôt que dans un fichier comme spécifié dans la question.essayer:
cependant, cela ne fonctionnera pas si deux ou plusieurs caractères sur la même ligne. Ils seront comptés comme un caractère
la source
grep -oF '"' fichier | wc -l
-F signifie chaîne fixe
la source
-F
drapeau, qui n'est pas nécessaire ici.Méthode double excentrique GNU
grep
:la source