Eu tenho um arquivo de texto grande, tem 46 colunas no total:
ENTRADA
Column1 Column2 ... Column46
Preciso enumerar e contar quantas vezes se repetem da coluna 17 até a 46. Por exemplo:
Meu arquivo está assim:
Column17 Column18 Column19 Column20 Column21 Column22 Column23 ... Column46
Column17 Column18 Column19 Column20 Column21 Column22 Column23 ... Column46
Column17 Column18 Column20 Column22
Column18 Column20
Column20
Saída Desejada:
1 Column17 - 2 times
2 Column18 - 3 times
3 Column19 - 1 time
4 Column20 - 4 times
5 Column21 - 0 times
6 Column22 - 2 times
7 Column23 - 1 time
" " - N times
29 Column46 - 1 times
Meu comando awk:
awk '{n=1;if(NR==1)n=25;for(i=n;i<=NF;i++) a[$i]++} END{for(val in a) print val,a[val]}' filelog.txt
Saída real:
Column1 ... Column46
bla 1 blaN...3 bla 3
bla 3 blaN...2 bla 5
bla 7 blaN...4 bla 7
Pega toda e cada string de todo o arquivo e conta quantas vezes se repetem. Por exemplo:
Column1 //There are 54 lines, takes all words/strings of that column
bla 3 //The 3 and 4, is the number of repetitions.
bla 4
Mas meu comando conta todas as colunas (do 1 , até o 46 ) e cada frase em si, e o que eu quero é contar do 17 até o 46 como a Saída Desejada Existe alguma maneira de fazer com o meu mesmo comando? ou é necessariamente fazê-lo por outro?
Se eu entendi seus requisitos corretamente, então este é o problema:
Para cada registro, exceto o primeiro, você define
n=1
. Em seguida, você processa todas as colunas a partir den
. Mas você realmente deseja definirn=17
.Use o comando cat com a opção -n para enumeração.
E especifique n=17 como você deseja começar a partir daí.
Use o seguinte comando: