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:
awk -F'"' 'NF % 2 == 0 { printf("Line %d has odd quoting: %s\n", NR, $0) }'
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 et NR
le nombre ordinal de l'enregistrement en cours ("le numéro de ligne").
Étant donné l'entrée suivante:
$ 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"
on a
$ 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"
Quelque chose comme
$ grep -o '"' | wc -l
retournerait "14" pour ce fichier.