Linux / Unix bash基本脚本awk / sed
发布时间:2020-12-14 00:05:13 所属栏目:Linux 来源:网络整理
导读:我正在研究bash脚本. var=$(ls -t1 | head -n1);cat $var | sed 's/"//g' latest.csvcat latest.csv | sed -e 's/^|$/"/g' -e 's/,/","/g' from_epos.csvecho "LATEST: $var"; 这是整个脚本,它意味着删除当前文件中的所有引号并在每个字段之间添加新引号. I
我正在研究bash脚本.
var=$(ls -t1 | head -n1); cat $var | sed 's/"//g' > latest.csv cat latest.csv | sed -e 's/^|$/"/g' -e 's/,/","/g' > from_epos.csv echo "LATEST: $var"; 这是整个脚本,它意味着删除当前文件中的所有引号并在每个字段之间添加新引号. INPUT: "sku","item","price","qty" 5135,"ITEM1",1.79,5 5338,"ITEM2",1.39,5 5318,"ITEM3",1.09,5 5235,"ITEM4",5 9706,"ITEM5",1.99,5 OUTPUT: "sku","qty" "5135","1.79","5 " "5338","1.39","5 " "5318","1.09","5 " "5235","5 " "9706","5 " 我理想的输出是: "sku","5" "5338","5" "5318","5" "5235","5" "9706","1.99","5" 看起来它正在输入当前输出中的行之间的随机字符 问题是什么以及如何实现理想愿景? 谢谢, 亚当 解决方法
awk可以在一个命令中执行所有这些操作:
awk -F"," 'NR>1{for(i=1; i<=NF; i++) {if (!($i ~ /^"/)) printf(""%s"",$i); else printf("%s",$i); if (i<NF) printf(","); else print "";}}' latest.csv 编辑: 试试这个awk :(从JS的建议命令修改) awk 'BEGIN{FS=OFS=","}{gsub(/"/,"");gsub(/[^,r]+/,""&"")}1' 要么 awk -F"[,r]" 'NR==1{print} NR>1{for(i=1; i<NF; i++) {if (!($i ~ /^"/)) printf(""%s"",$i); else printf("%s",$i); if (i<NF-1) printf(","); else print "";}}' (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |