Se awk
não estiver disponível, você poderá fazer isso com cut
, grep
e wc
:
$ echo -e 'a,b, c,d\na,val1 ,val2,c' \
| cut -d ',' -f2,3 | grep '^ *val1 *, *val2 *$' | wc -l
Assumindo ,
como delimitador (e de forma alguma escapou ,
é incluído) na entrada. Para fins de teste, as colunas 2 e 3 são usadas em vez de 14 e 15.
Observe que o padrão grep
permite espaços em branco finais após / antes dos valores (é possível remover os sub-padrões *
se você não quiser isso). Os meta-caracteres ^
e $
correspondem ao início e ao final de uma linha.
O canal grep "Value1" | grep "Value2"
de sua pergunta não faz o que você especifica - ele corresponderia muito, por exemplo:
..., Value1Value2, , ...
..., Value1, Value2, ...
..., OtherValue1, Value2, ...
...
Se awk
estiver disponível (é bem normal), você pode fazer assim:
$ echo -e 'a,b, c,d\na,val1,val2,c' \
| awk -F, '$2 == "val1" && $3 == "val2" {++sum} END {print sum}'
awk
apara automaticamente os espaços em branco dos valores. END
é um padrão especial que corresponde depois de todas as linhas serem processadas.