【问题标题】:sed - substitute between pattern on different linessed - 在不同行的模式之间替换
【发布时间】:2013-11-05 17:56:51
【问题描述】:

我有一个从电子表格导出的 csv 文件,该文件在最后一列中有时包含名称列表。文件是这样出来的:

ag,bd,cj,dy,"ss"
aa,bs,cs,fg,"name1
name2
name3
"
ff,ce,sd,de,
ag,bd,jj,ds,"ds"
fs,ee,sd,ee,"name4
name5
"

等等。

我想删除引号之间最后一列中的换行符,以便输出为:

ag,bd,cj,dy,ss
aa,bs,cs,fg,"name1 name2 name3"
ff,ce,sd,de,
ag,bd,jj,ds,"ds"
fs,ee,sd,ee,"name4 name5"

谢谢

【问题讨论】:

    标签: sed pattern-matching


    【解决方案1】:

    awk 可能是您的一种解决方案:

    awk '/\"/ {s=!s} {printf "%s"(s?FS:RS),$0}'
    ag,bd,cj,dy,ss
    aa,bs,cs,fg,"name1 name2 name3 "
    ff,ce,sd,de,df
    

    新的解决方案

    awk -F\" 'NF==3; NF==2 {s++} s==1 {printf "%s ",$0} s==2 {print;s=0}' | awk '{sub(/ "/,"\"")}1' file
    ag,bd,cj,dy,"ss"
    aa,bs,cs,fg,"name1 name2 name3"
    ag,bd,jj,ds,"ds"
    fs,ee,sd,ee,"name4 name5"
    

    【讨论】:

    • 感谢 Jotne,这确实有效,但是我没有正确输入我的示例。问题是最后一列,如果有数据,那么它在引号中,如果没有数据是空的。那么这个例子应该像上面编辑过的问题中的那个(添加引号和几行)
    • 添加了一个应该可以工作的新解决方案。不是最好的..(不喜欢两个awk应该是一个)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-06-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-08-21
    • 2023-02-04
    相关资源
    最近更新 更多