Adicione coluna correspondente do arquivo de índice a um csv

1

Eu tenho um arquivo index.txt com dados como:

2013/10/13-121 f19f26f09691c2429cb33456cf64f867
2013/10/17-131 583d3936c814c1bf4e663fe1688fe4a3
2013/10/20-106 0f7082e2bb7224aad0bd7a6401532f56
2013/10/10-129 33f7592a4ad22f9f6d63d6a17782d023
......

E um segundo arquivo no formato CSV com dados como:

2013/10/13-121, DLDFWSXDR, 15:33, 18:21, Normal, No, 5F2B0121-4F2B-481D-B79F-2DC827B85093/22551965
2013/10/17-131, DLDFWXDR, 11:05, 15:08, Normal, No, 5F2B0121-4F2B-481D-B79F-2DC827B85093/22551965
2013/10/20-106, DLSDXDR, 12:08, 13:06, Normal, No, 5F2B0121-4F2B-481D-B79F-2DC827B85093/22551965
2013/10/10-129, DLXDAE, 15:33, 18:46, Normal, No, 5F2B0121-4F2B-481D-B79F-2DC827B85093/22551965

Agora eu preciso de uma solução para adicionar o MD5SUM no final do CSV quando o ID (primeira coluna) for uma correspondência no arquivo de índice ou vice-versa, portanto, no final, o arquivo deve ficar assim:

2013/10/13-121, DLDFWSXDR, 15:33, 18:21, Normal, No, 5F2B0121-4F2B-481D-B79F-2DC827B85093/22551965, f19f26f09691c2429cb33456cf64f867
2013/10/17-131, DLDFWXDR, 11:05, 15:08, Normal, No, 5F2B0121-4F2B-481D-B79F-2DC827B85093/22551965, 583d3936c814c1bf4e663fe1688fe4a3
2013/10/20-106, DLSDXDR, 12:08, 13:06, Normal, No, 5F2B0121-4F2B-481D-B79F-2DC827B85093/22551965, 0f7082e2bb7224aad0bd7a6401532f56
2013/10/10-129, DLXDAE, 15:33, 18:46, Normal, No, 5F2B0121-4F2B-481D-B79F-2DC827B85093/22551965, 33f7592a4ad22f9f6d63d6a17782d023
    
por T-One 23.08.2018 / 13:13

3 respostas

1

Tente com o comando join .

join  <(sort file1.csv | sed 's/$/,/g') <(sort index.txt | sed 's/ /, /g')

2013/10/10-129, DLXDAE, 15:33, 18:46, Normal, No, 5F2B0121-4F2B-481D-B79F-2DC827B85093/22551965, 33f7592a4ad22f9f6d63d6a17782d023
2013/10/13-121, DLDFWSXDR, 15:33, 18:21, Normal, No, 5F2B0121-4F2B-481D-B79F-2DC827B85093/22551965, f19f26f09691c2429cb33456cf64f867
2013/10/17-131, DLDFWXDR, 11:05, 15:08, Normal, No, 5F2B0121-4F2B-481D-B79F-2DC827B85093/22551965, 583d3936c814c1bf4e663fe1688fe4a3
2013/10/20-106, DLSDXDR, 12:08, 13:06, Normal, No, 5F2B0121-4F2B-481D-B79F-2DC827B85093/22551965, 0f7082e2bb7224aad0bd7a6401532f56
  • sort t1 | sed 's/$/,/g' sort file1.csv e sufix por vírgula.
  • sort t2 | sed 's/ /, /g' sort index.txt e substitua o delimitador
  • Em seguida, use o comando join (por padrão, primeiro campo).
por 23.08.2018 / 13:26
1

Usando awk sem classificar nenhum arquivo:

awk 'NR==FNR{a[$1]=$2;next}{$(NF+1)=a[$1]}1' index.txt FS=', ' OFS=', ' file.csv

A primeira instrução block permite que o primeiro arquivo index.txt seja copiado para o array a .

A segunda instrução de bloco anexa o conteúdo da matriz a no final da linha do arquivo file.csv se a chave (primeiro campo do arquivo) fizer parte da matriz.

    
por 23.08.2018 / 14:04
1

Tente também - os IDs no primeiro e no segundo arquivo são diferentes:

awk 'NR == FNR {S[$1] = $2; next} {print $0 FS " " S[$1]}' file1 FS="," file2
    
por 23.08.2018 / 14:04

Tags