Jeśli dwa wiersze w pliku mają nieparzystą liczbę podwójnych cudzysłowów, łączna suma podwójnych cudzysłowów będzie parzysta i nie wykryjesz niezrównoważonych cudzysłowów (zakładam, że tak naprawdę chciałbyś to zrobić, ale mogę się mylić ).
Ten awk
skrypt zgłasza każdą linię w linii wejściowej, która zawiera nieparzystą liczbę cudzysłowów:
awk -F'"' 'NF % 2 == 0 { printf("Line %d has odd quoting: %s\n", NR, $0) }'
Możemy ustawić separator pól ( FS
), aby "
z -F'"'
co oznacza, że jeśli linia ma numer nawet pól to ma dziwnych cytatów. NF
jest liczbą pól w ostatnim rekordzie i NR
jest liczbą porządkową bieżącego rekordu („numer linii”).
Biorąc pod uwagę następujące dane wejściowe:
$ 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"
dostajemy
$ 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"
Coś jak
$ grep -o '"' | wc -l
zwróci „14” dla tego pliku.