Na przykład chcemy policzyć wszystkie "
znaki quote ( ); martwimy się tylko, jeśli pliki zawierają więcej ofert niż powinny.
Na przykład:
cluster-env,"manage_dirs_on_root","true"
cluster-env,"one_dir_per_partition","false"
cluster-env,"override_uid","true"
cluster-env,"recovery_enabled","false"
oczekiwane rezultaty:
16
text-processing
Yael
źródło
źródło
Odpowiedzi:
Możesz łączyć
tr
(tłumaczyć lub usuwać znaki) zwc
(liczyć słowa, linie, znaki):(
-d
usuń wszystkie znaki zc
dopełnienia"
, a następnie policz znakic
).źródło
podejście grep :
-o
- wyświetla tylko dopasowane podciągiLub z pojedynczym gawk :
RS=''
- pusty separator rekordów (zamiast nowego wiersza)FPAT='"'
- wartość pola definiującego wzórźródło
-o
jest niestandardowym rozszerzeniem GNU do standardowegogrep
narzędzia. Nie wspomniano o tym w dokumentacji POSIXgrep
.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: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 iNR
jest liczbą porządkową bieżącego rekordu („numer linii”).Biorąc pod uwagę następujące dane wejściowe:
dostajemy
Coś jak
zwróci „14” dla tego pliku.
źródło
Kolejne pojedyncze
gawk
podejście:źródło
Czysta BASH:
źródło
tmp
tablica? Jeśli tak, czytmp
jest to tablica czego?tmp
w tym fragmencie znajduje się normalna zmienna powłoki. Głosuję za odrzuceniem tej odpowiedzi, ponieważ liczy się to, ile razy znak pojawia się w zmiennej (var
), a nie w pliku, jak określono w pytaniu.próbować:
nie zadziała to jednak, jeśli dwa lub więcej znaków w tej samej linii. Będą liczone jako jeden znak
źródło
plik grep -oF '"| wc -l
-F oznacza stały ciąg
źródło
-F
flagę, która nie jest tutaj potrzebna.Ekscentryczna metoda podwójnego GNU
grep
:źródło