arquivo padrão como uma entrada para RS, FS em awk / sed / grep para reconhecer e adicionar colunas

1

Eu tenho um arquivo que tem os padrões que eu tenho que encontrar no conjunto de dados e adicionar os números em uma coluna dos dados. Eu quero escrever um script ou usar awk / sed / grep para consultar automaticamente os padrões em um determinado arquivo para cruzar com os dados que tenho e adicionar os números nas colunas com o padrão correspondente.

Exemplo: -

Dados

TITLE, COUNT, RESA

10th ECOMF,PAB  1   MAT

10th ICOCPS (CPV-'10)   23  SCI

10th ICOCPS (CPV-'10)   6   SCI

10th ICOMAMOS (M2S-X)   3   EEE

JOP 32  COP

AIP 34  Sff

JOP 43  COP

HIT 42  tilde

Meu arquivo padrão consiste em nomes dos diários: -

10th ECOMF,PAB

10th ICOCPS (CPV-'10)

10th ICOCPS (CPV-'10)

10th ICOMAMOS (M2S-X)

JOP

AIP

JOP

HIT

SUPERCONDUCTIVITY (M2S-X)

Saída desejada:

10th ECOMF,PAB  1

10th ICOCPS (CPV-'10)   29

10th ICOMAMOS (M2S-X)   3

JOP 75

AIP 34

HIT 42

.

.

assim por diante,

PS: - Os dados são separados por tabulação, eu mesmo os dados em CSV também.

    
por CCC 08.08.2017 / 06:37

1 resposta

2
Solução

awk :

awk 'BEGIN{ FS=OFS="\t" }
     NR==FNR{ if(NF && !($0 in b)) { a[++c]=$0; b[$0] } next }{ b[$1]+=$2 }
     END{ len=length(a); for(i=1;i<=len;i++) if(a[i] in b) print a[i],b[a[i]] }' patterns data
  • BEGIN{ FS=OFS="\t" } - separador de campos de configuração

  • a[++c]=$0; b[$0] - coletando nomes exclusivos de diário do arquivo patterns

  • b[$1]+=$2 - somando os números de cada nome do diário em data file

  • if(a[i] in b) print a[i],b[a[i]] - acrescenta o valor da soma a cada nome do diário no arquivo pattern

A saída:

10th ECOMF,PAB  1
10th ICOCPS (CPV-'10)   29
10th ICOMAMOS (M2S-X)   3
JOP 75
AIP 34
HIT 42
...
    
por 08.08.2017 / 07:27