Отформатируйте .csv, используя bash - PullRequest
0 голосов
/ 03 мая 2020

У меня есть данные из таблицы Inte rnet в текстовом файле. Мне нужно преобразовать этот файл в стандарт .csv (через запятую и т. Д. c.) И очистить его. Например:

Data    Fechamento  Variação    Variação (%)    Abertura    Máxima  Mínima  Volume
30 Abr 2020     2,00    0,76    61,29%  1,99    2,10    1,80    152.100
29 Abr 2020     1,24    -0,44   -26,19%     1,28    1,71    1,20    125.700

Мой код:

echo -e "File: \c"
read nome_arq

arq=$(<$nome_arq)

arq=$(echo $arq | sed 's/%//g')
arq=$(echo $arq | sed 's/()//g')
arq=$(echo $arq | sed 's/\.//g')
arq=$(echo $arq | sed 's/\+//g')
arq=$(echo $arq | sed 's/ Abr /_04_/g')
arq=$(echo $arq | sed 's/ Mar /\_03_/g')
arq=$(echo $arq | sed 's/\,/\./g')
arq=$(echo $arq | sed 's/\ /\,/g')

append="_clean"
echo -e $arq >> $nome_arq$append 

Однако в выходных данных нет разрывов строк, выходной файл содержит только одну строку:

Data,Fechamento,Variação,Variação,Abertura,Máxima,Mínima,Volume,30_04_2020,2.00,0.76,61.29,1.99,2.10,1.80,152100,29_04_2020,1.24,-0.44,-26.19,1.28,1.71,1.20,125700,

Что я могу сделать, чтобы сохранить исходные разрывы строк в моем выводе?

Редактировать 5 мая:

Я получаю свой результат с помощью следующего кода:

append="_clean"
cat $nome_arq|while read z;do echo "$z"|sed "s/\s\+/\"xxxx\"/g; s/^/\"/g; s/$/\"/g";done >> $nome_arq$append

sed 's/%//g' $nome_arq$append > output
rm $nome_arq$append
sed 's/()//g' output > output1
rm output
sed 's/\.//g' output1 > output2
rm output1
sed 's/\+//g' output2 > output3
rm output2
sed 's/\"//g' output3 > output4
rm output3
sed 's/xxxxMaixxxx/_05_/g' output4 > output5
rm output4
sed 's/xxxxAbrxxxx/\_04_/g' output5 > output6
rm output5
sed 's/xxxxMarxxxx/\_03_/g' output6 > output7
rm output6
sed 's/,/\./g' output7 > output8
rm output7
sed 's/xxxx/,/g' output8 > output9
rm output8

Очевидно, что это далеко не так. Я не мог использовать команду "tr", например. Как я могу сделать свой сценарий проще?

Ответы [ 2 ]

1 голос
/ 04 мая 2020

(ОБНОВЛЕНО)

Символы новой строки теряются при выполнении финального echo. Если вам не требуется интерпретация последовательностей с обратной косой чертой (которую вы запрашиваете с помощью echo -e (и которая в любом случае не имеет смысла в вашем случае, по крайней мере, не для ввода в качестве примера)), выполните

cat <<<"$arq" >> "$nome_arq$append" 

вместо.

1 голос
/ 03 мая 2020

попробуйте это:

cat your_input_File|while read z;do echo "$z"|sed "s/\s\+/\",\"/g; s/^/\"/g; s/$/\"/g";done

Это вернет:

"Data","Fechamento","Variação","Variação","(%)","Abertura","Máxima","Mínima","Volume"
"30","Abr","2020","2,00","0,76","61,29%","1,99","2,10","1,80","152.100"
"29","Abr","2020","1,24","-0,44","-26,19%","1,28","1,71","1,20","125.700"
...