Se você tiver apenas um registro por arquivo, então este é um loop de leitura simples.
#!/bin/bash
read_data()
{
local first last addr city state zip
file=$1
while read -r header data
do
case $header in
FirstName:) first=$data ;;
LastName:) last=$data ;;
Address:) addr=$data ;;
City:) city=$data ;;
State:) state=$data ;;
Zip:) zip=$data ;;
*) echo Ignoring bad line $header $data >&2
esac
done < $file
echo "$file,$first,$last,$addr,$city,$state,$zip"
}
for file in *srcfiles*
do
read_data $file
done
A função read_data
lê cada linha e divide a linha em um "cabeçalho" e um "dado". Quando chegamos ao final do arquivo, acabamos de imprimir os resultados.
Chamamos essa função uma vez para cada arquivo de origem por meio do loop for
.
Observe algumas pegadinhas em potencial: se houver vírgulas nos dados, isso quebrará as coisas, então você pode querer fazer
echo "\"$file\",\"$first\",\"$last\",\"$addr\",\"$city\",\"$state\",\"$zip\""
como saída para incluir tudo dentro do layout "..."
. Se houver qualquer "
nos dados, isso poderá fazer com que o CSV também seja malformado.
Ajuste a linha echo
para corresponder ao formato desejado.