A melhor ferramenta para o trabalho é provavelmente join
mas como você mencionou awk
, aqui está outra abordagem:
$ awk -F',' -vOFS="," 'FNR==NR{a[$1]=$2;b[$1]=$3; next}{print $0,a[$3],b[$3]}' file1 file2
Converting,:Developer::|[E],android,Exact,,,,8,31,1,2
Converting,:Developer::|[E],osx,Exact,,,,8,31,2,5
Converting,:Developer::|[E],windows,Exact,,,,8,31,,
Ele usa dois arrays, a
e b
, que têm o primeiro campo de file1
como chaves e o segundo e o terceiro como valores, respectivamente. O FNR==NR{...next}
garante que apenas o primeiro arquivo seja salvo nas matrizes. Então, ao processar o segundo arquivo, imprimimos a linha do arquivo ( $0
), seguida pelos valores correspondentes ao primeiro campo dos arrays a
e b
. O -vOFS=","
define o separador do campo de saída como uma vírgula, de modo que obtemos o formato de saída desejado.
Alternativamente, um pouco mais enigmaticamente:
$ awk -F',' -vOFS="," 'FNR==NR{a[$1]=$2","$3;next}{print $0,(a[$3]?a[$3]:",")}' file1 file2
Converting,:Developer::|[E],android,Exact,,,,8,31,1,2
Converting,:Developer::|[E],osx,Exact,,,,8,31,2,5
Converting,:Developer::|[E],windows,Exact,,,,8,31,,