加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > Linux > 正文

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"

看起来它正在输入当前输出中的行之间的随机字符
?“和引号在CR和LF之间.

问题是什么以及如何实现理想愿景?

谢谢,

亚当

解决方法

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 "";}}'

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读