Vou tentar ser específico e claro.
Eu tenho um arquivo: log.txt
ele contém várias strings que eu pesquiso para imprimir e contar cada uma delas.
Este é o meu comando, apenas imprima coincidências de colunas no log.txt
arquivo:
sed -n '1p' log.txt | awk '{ s = ""; for(i = 25; i <= NF; i++) s = s $i "\n"; print s}'
Explicação
sed -n '1p' //prints the first line
awk '{ s = ""; for(i = 25; i <= NF; i++) s = s $i "\n"; print s}' //prints the next columns from the number 25 column
Entrada:
Column25 Column26 Column27 ColumnN <--#first filter:I need obtain specific headers. ColumnN
Column25 Column27 ColumnN
Column26 Column27 <--#Count how many times is repeat every string in whole file
Resultado:
Column25
Column26
Column27
Column28
Column29
ColumnN
Eu tento fazer:
Da saída anterior eu quero contar todas as coincidências no mesmo arquivo file.log
mas no mesmo comando:
sed -n '1p' log.txt | awk '{ s = ""; for(i = 25; i <= NF; i++) s = s $i "\n"; print s}'
e envie novamente para a saída como:
Saída Desejada:
Column25 - n times
Column26 - n times
Column27 - n times
Column28 - n times
Column29 - n times
ColumnN - n times
PS. Estou pensando em usar a mesma variável "$s"
no loop for para iniciar uma busca, mas não está funcionando.
Veja como eu abordaria esse problema:
O fato de você querer capturar os campos 25 e posteriores na primeira linha, exige que verifiquemos a
NR
variável e definamos an
variável que será usada no loop. Quanto aa[$i]++
isso será um array associativo com os campos sendo chaves e os valores dentro do array terão sua contagem incrementada via++
operador. Este é um método muito típico para contar campos no awk.Que tal
EDIT: Em sua entrada de exemplo recém-adicionada, você não tem 24 campos para ignorar antes que a contagem comece, e a limitação para a primeira linha (conforme inferido do seu primeiro trecho de código) parece ter desaparecido também. Tentar