Ubuntu 16.04
Bash 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 ..."
我可以像这样全局修剪第十栏:
sed -r 's/([^,]{0,30})[^,]*/\1/10/g' $feed
但是我不确定如何在跳过第一行时在截断的文本末尾添加空格和3个点。
答案 0 :(得分:1)
这是我为您尝试的代码:
#!/bin/bash
a=`awk -F',' '{print $5}' test.csv | tr -d '"' | cut -b -10`;
b='"'$a' ..."';
z="$(awk -F, -v fcol="$b" '{print $1,$2,$3,$4,$5=fcol,$6}' OFS=, test.csv)"
echo "$z" > someotherfile.csv
这将为您提供"one","two","three","four","fivefivefi ...","six",
的输出。