【问题标题】:Extract subset of a feed file with custom delimiter and create CSV file使用自定义分隔符提取提要文件的子集并创建 CSV 文件
【发布时间】:2017-05-16 19:55:54
【问题描述】:

我得到以下格式的提要文件。

employee_id||034100151730105|L|
employee_cd||03410015|L|
dept_id||1730105|L|
dept_name||abc|L|
employee_firstname||pqr|L|
employee_lastname||ppp|L|
|R||L|
employee_id||034100151730108|L|
employee_cd||03410032|L|
dept_id||4230105|L|
dept_name||fdfd|L|
employee_firstname||sasas|L|
employee_lastname||dfdf|L|
|R||L|
.....

是否有任何简单的 unix 脚本来提取 子集 字段并创建 CSV 如下所示..

employee_cd,employee_firstname,dept_name
03410015,pqr,abc
03410032,sasas,fdfd
.....

【问题讨论】:

  • 是的。你有没有尝试过这样做?

标签: shell unix awk sed grep


【解决方案1】:

我会建议 awk 解决方案(考虑到 dept_name 项目总是在 employee_firstname 项目之前):

awk -F'|' 'BEGIN{OFS=","; print "employee_cd,employee_firstname,dept_name";}
     $1~/employee_cd|employee_firstname|dept_name/{ a[++c]=$3 }
     END { for(i=1;i<length(a);i+=3) print a[i],a[i+2],a[i+1] }' file

输出:

employee_cd,employee_firstname,dept_name
03410015,pqr,abc
03410032,sasas,fdfd

解决方案详情:

  • OFS="," - 设置输出字段分隔符

  • $1~/employee_cd|employee_firstname|dept_name/ - 如果第一列与所需项目之一匹配

  • a[++c]=$3 - 捕获由后续位置索引的项目值

  • for(i=1;i&lt;length(a);i+=3) print a[i],a[i+2],a[i+1] - 按三个输出项目值


将输出保存为.csv 文件:

the above command > output.csv

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2022-12-09
    • 2014-05-28
    • 1970-01-01
    • 2020-12-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多