Ubuntu 16.04
Баш 4.3.3
Вот заголовок и вторая строка файла CSV.
"dealer_Id","vin","stock_id","mileage","year","make","model","body","transmission","engine","drive","interior_color","exterior_color","web_price"
"MP000","3GNCJPSB2KL130000","2190025","3","2019","Chevrolet","Trax","4D Sport Utility","6-Speed Automatic","ECOTEC 1.4L I4 SMPI DOHC Turbocharged VVT","AWD",
Вот мой скрипт sed, который заменит несколько имен заголовков и несколько строк по всему миру. Я могу заменить строки глобально, так как знаю, что они никогда не появятся в именах заголовков.
for feed in *; do
sed -i '
s/"stock_id"/"stocknumber"/;
s/"body"/"bodystyle"/;
s/"engine","drive"/"enginetext","drive"/;
s/"exterior_color"/"color"/;
s/"interior_color"/"interiorcolor"/;
s/"web_price"/"price"/;
s/<b>//g; s/*//g;
s/\([0-9]\)""/\1inch/g' "$feed"
done;
Строка заголовка теперь идеальна.
"dealer_Id","vin","stocknumber","mileage","year","make","model","bodystyle","transmission","enginetext","drive",
"MP000","3GNCJPSB2KL130000","2190025","3","2019","Chevrolet","Trax","4D Sport Utility","6-Speed Automatic","ECOTEC 1.4L I4 SMPI DOHC Turbocharged VVT","AWD",
Значения в 10-м столбце довольно длинные:
"ECOTEC 1.4L I4 SMPI DOHC Turbocharged VVT"
Нам нужно обрезать его так, чтобы оно помещалось в заданное пространство внутри приложения без переноса на следующую строку. Таким образом, мы решили, что если 10-й столбец содержит более 34 символов, мы должны укоротить его до 30 символов, а затем добавить пробел и 3 точки в конце, чтобы он выглядел так:
"ECOTEC 1.4L I4 SMPI DOHC Turbo ..."
Я могу обрезать 10-ю колонку глобально, вот так:
sed -r 's/([^,]{0,30})[^,]*/\1/10/g' $feed
но я не уверен, как добавить пробел и 3 точки в конце усеченного текста при пропуске первой строки.