Você pode usar awk para isso:
awk -F',|, ' 'NR==FNR{a[$2]=$3} NR>FNR{$8=a[$8];print}' OFS=',' "$file2" "$file1"
Isso lê model-list.csv, armazenando todos os modelos e suas descrições em uma matriz indexada por string (por exemplo, a["Z800"] == "HP Z800 Workstation" ). Em seguida, ele lê os dados da lista, substituindo cada modelo pela string de descrição da matriz.
Explicação:
-
-F',|, '- define o separador de campos usando um padrão regex, neste caso o separador de campos será uma vírgula única ou uma única vírgula e um único espaço. -
NR==FNR{a[$2]=$3}- NR é uma variável interna awk que registra o número total de linhas lidas desde o início do programa. O FNR é similar, mas mantém o controle do número de linhas do arquivo atual que foram lidas. Portanto,NR==FNRé um idioma do awk que significa "se este for o primeiro arquivo a ser lido", e a ação associada éa[$2]=$3, que salva o valor do campo 3 no arraya, com o índice de strings sendo definido para o valor do campo 2. -
NR>FNR{$8=a[$8];print}'- semelhante ao anterior, mas desta vez opera somente em arquivos diferentes do primeiro a ser lido. Para cada linha, usamos o valor do campo 8 como o índice para procurar o valor na matriz e, em seguida, reatribuímos o campo 8 ao valor da matriz. Finalmente, toda a linha é impressa. -
OFS=',' "$file2" "$file1"- define o separador do campo de saída para uma vírgula (o padrão é o espaço) e, em seguida, lê dois arquivos na ordem especificada.