processamento de dados de dois arquivos de entrada

0

Eu tenho dois arquivos de entrada enormes:

file1 contém 3 campos separados por tabulações:

  • field1 : UID
  • field2 : nome de usuário
  • field3 : nome real

Exemplo de file1 :

644     u11496   Real name1
640     u1309    Real name2
641     u3007    Real name3
642     u3030    Real name4
643     u3112    Real name5
54      u0365 Real name6
55      u0613 Real name7
56      u1065 Real name8
57      u1550 Real name9

file2 com várias linhas, cada uma com três campos separados por tabulações:

  • field1 : pode ser ignorado para este caso
  • field2 : nome do grupo
  • field3 : coluna contendo UIDs de usuários separados por vírgula

Exemplo de file2 :

2       group1   14,730,748,733,746,761,757,766,735,760,747,738,752,737,758,755,734,754,764,334,335,336,337,41,338,339,39,340
6       group2        14
15      group3  14,667,683,713,730,707,748,733,746,761,680,694,757,766,717,735,760,747,704,738,752,737,715,688,681,700,692,758,755,714,734

Eu preciso adicionar a cada linha de usuário em file1 , quarta coluna (separada por tabulação) com nomes de grupo separados por vírgula dos quais um usuário em particular é membro.

    
por DonJ 13.03.2018 / 16:37

1 resposta

0

O script de shell a seguir (estou usando o ksh) criará um terceiro arquivo para sua solicitação.

while read U REST
do
  S="       "   # initialized with a tabulation
  G=""
  grep -E '[        ,]'"$U"'(,|$)' file2.txt | while read X GROUP USRLIST
  do
    G="$G$S$GROUP"
    S=","
  done
  echo "$U  $REST$G"  # tab between $U and $REST
done < file1.txt > file3.txt

com file1.txt como

644 u11496  Real name1
640 u1309   Real name2
641 u3007   Real name3
642 u3030   Real name4
643 u3112   Real name5
54  u0365   Real name6
55  u0613   Real name7
56  u1065   Real name8
57  u1550   Real name9
14  u14     Jules Ceasar

arquivo2.txt como

2   group1  14,730,748,733,746,761,757,766,735,760,747,738,752,737,758,755,734,754,764,334,335,336,337,41,338,339,39,340
6   group2  14   
14  group6  667,683,641
15  group3  14,667,683,713,730,707,748,733,746,761,680,694,757,766,717,735,760,747,704,738,752,737,715,688,681,700,692,758,755,714,734

você obterá o arquivo3.txt como

644 u11496  Real name1
640 u1309   Real name2
641 u3007   Real name3      group6
642 u3030   Real name4
643 u3112   Real name5
54  u0365   Real name6
55  u0613   Real name7
56  u1065   Real name8
57  u1550   Real name9
14  u14     Jules Ceasar    group1,group2,group3
    
por 13.03.2018 / 17:19