Compare a primeira coluna em 2 arquivos e substitua a 3ª coluna do arquivo 1 pela 4ª coluna do arquivo 2

2

Eu tenho um requisito de comparar a primeira coluna entre arquivos delimitados por 2 canais e, se eles corresponderem, eu preciso substituir a 3ª coluna no Arquivo 1 pela 4ª coluna no Arquivo 2.

Arquivo 1:

111|xyz|23345
222|abc|123
333|xyz|45667
444|xyz|5432
555|xyz|8976

Arquivo 2:

111|xyz|344|rtms
222|abc|222|xyzw
666|xyz|ggg|abde
888|xyz|ff|nnnn
333|xyz|dd|abde
444|xyz|vv|nnnn
555|xyz|bbb|uuyytt

Arquivo de saída:

111|xyz|rtms
222|abc|xyzw
333|xyz|abde
444|xyz|nnnn
555|xyz|uuyytt
    
por Sachin 15.08.2015 / 02:05

1 resposta

3

One-liner sem a necessidade de awk e um arquivo temporário:

join -t '|' -j1 -o 1.1 1.2 2.4 <(sort -t'|' -k1,1 file1) <(sort -t '|' -k1,1 file2)

Usando os dois join e awk :

Primeiro, classifique file2 com base no primeiro campo e salve-o em file2.sort

sort -k 1 file2 > file2.sort

Agora, usando "|" como o delimitador, junte file1 e file2.sort . Então, novamente usando "|" como o delimitador, extraia a coluna necessária usando awk .

join -t '|' file1 file2.sort | awk -F  "|" ' {print $1"|"$2"|"$6}'

A saída será:

ron@ron:~$ join -t '|' file1 file2.sort | awk -F  "|" ' {print $1"|"$2"|"$6}'
111|xyz|rtms
222|abc|xyzw
333|xyz|abde
444|xyz|nnnn
555|xyz|uuyytt
    
por 15.08.2015 / 11:43