Embora a solução de don_crissti seja muito profissional, acho que deve haver também uma versão mais amigável para iniciantes, já que nenhum dos funcionamentos internos de join
nem (com chave) sort
é algo que eu tentaria explicar um iniciante ...
O meu usa arrays e ... é, portanto, expansível , caso haja algum identificador adicionado no futuro.
O uso é scriptname <file>
.
Solução mais segura:
(O arquivo original não será sobrescrito; você encontrará o arquivo transformado como output.csv
)
#!/bin/bash
arr_src=("B" "C" "F" "P" "S" "W")
arr_dst=("BENIGN" "CUSTOMER" "FRAME" "PPCOS" "STANDARD" "W-RED")
ftmp="$1"
fout="output.csv"
workfile=".wrkfil"
cp $ftmp $workfile # make backup!
for ((i=0;i<${#arr_src[@]};i+=1)); do
sed -i 's/'"${arr_src[i]}"'$/'"${arr_dst[i]}"'/g' $workfile
# echo && cat $workfile
done
mv $workfile $fout
Solução mais curta (mas mais perigosa):
(O arquivo original será sobrescrito; portanto, se você pretende adicionar outra "carta", certifique-se de que os comprimentos da matriz de origem e destino sejam sempre idênticos. Caso contrário, os resultados serão imprevisíveis.)
#!/bin/bash
arr_src=("B" "C" "F" "P" "S" "W")
arr_dst=("BENIGN" "CUSTOMER" "FRAME" "PPCOS" "STANDARD" "W-RED")
fout="$1"
for ((i=0;i<${#arr_src[@]};i+=1)); do
sed -i 's/'"${arr_src[i]}"'$/'"${arr_dst[i]}"'/g' $fout
# echo -e "\nOutput file now: $(cat $fout)"
done