Adicionando uma nova coluna no arquivo1 que gera uma string em um arquivo de arquivo de referência2 que corresponde ao valor de outra coluna no arquivo1

1

file1.txt (delimitador de tabulação, com a segunda coluna contendo uma string com espaços):

A   Golden fog
B   Vibrant rainbow and sunny
C   Jumping, bold, and bright
D   Chilly/cold/brisk air

arquivo2.txt (delimitador de tabulação):

D01 Ti600   A
D02 Ti500   B
D16 Ti700   C
D20 Ti800   B

saída desejada para file3.txt (com um delimitador de tabulação):

D01 Ti600   A   Golden fog
D02 Ti500   B   Vibrant rainbow and sunny
D16 Ti700   C   Jumping, bold, and bright
D20 Ti800   B   Vibrant rainbow and sunny

ou pelo menos isso para file3.txt:

D01 Ti600   Golden fog
D02 Ti500   Vibrant rainbow and sunny
D16 Ti700   Jumping, bold, and bright
D20 Ti800   Vibrant rainbow and sunny

Eu tentei

awk 'NR==FNR{a[$1]=$2;next}{$3=a[$1];}1' file1.txt file2.txt > file3.txt

Mas eu só entendo:

D01 Ti600 
D02 Ti500 
D16 Ti700 
D20 Ti800 

Que possui um delimitador de espaço em vez de guias, bem como um espaço após a coluna 2, mas nenhum valor na coluna 3.

Muito obrigado por qualquer ajuda para obter o resultado desejado.

    
por peter 03.05.2018 / 00:33

1 resposta

0

Embora você tenha notado que os arquivos são delimitados por tabulações, na verdade você não fez uso disso. Além disso, a chave comum A , B etc. está no campo terceiro de file2.txt . Então:

$ awk 'BEGIN{OFS=FS="\t"} NR==FNR{a[$1]=$2;next}{$4=a[$3];}1' file1.txt file2.txt
D01 Ti600   A   Golden fog
D02 Ti500   B   Vibrant rainbow and sunny
D16 Ti700   C   Jumping, bold, and bright
D20 Ti800   B   Vibrant rainbow and sunny

ou (ligeiramente mais curto)

$ awk -F'\t' 'NR==FNR{a[$1]=$2;next}{print $0"\t"a[$3]}' file1.txt file2.txt
D01 Ti600   A   Golden fog
D02 Ti500   B   Vibrant rainbow and sunny
D16 Ti700   C   Jumping, bold, and bright
D20 Ti800   B   Vibrant rainbow and sunny
    
por 03.05.2018 / 00:58