Você pode ter grep
contando-as para você.
Supondo que as linhas que você precisa começam com 2
, você pode usar o seguinte:
grep -c '^[[:space:]]*2\>' $(find . -type f -print0 | xargs -0 echo)
O \>
no final da regex garante que a correspondência seja interrompida em um "limite de palavras" para evitar falsos alarmes, como linhas iniciadas por 20 em vez de 2.
Nota:
Se os "40 arquivos" que você está procurando estiverem no mesmo diretório (não em subdiretórios), você pode fazer com que find
pesquise apenas no diretório atual sem recursionar (para obter menos latência), como então:
find -maxdepth 1 . -type f -print0
Atualização:
Para corresponder arquivos onde o 2 ocorre em uma coluna diferente da primeira, você pode fazer isso:
COLNUM=3
TOMATCH=$(($COLNUM-1))
grep -cE "^[[:space:]]*([0-9]+[[:space:]]+){$TOMATCH}2\>" \
$(find . -type f -print0 | xargs -0 echo)
Você pode alterar COLNUM
, conforme necessário. Basicamente, o que isto significa é que ele tenta igualar as colunas COLNUM-1
seguido por um 2 em um limite de palavra. A opção -E
é necessária para ativar expressões regulares estendidas, o que permite usar a notação {}
para especificar um quantificador numérico (ou seja, 'corresponde ao padrão anterior muitas vezes').
No entanto, observe que, se você inserir um número de coluna que não existe no arquivo, o regex falhará silenciosamente.