【问题标题】:use awk to process a csv (tab delimited) line by line使用 awk 逐行处理 csv(制表符分隔)
【发布时间】:2013-08-17 03:14:37
【问题描述】:

很抱歉,如果使用 AWK 无法做到这一点,但这是我可以使用 AWK 想到的。

我有一个 CSV 文件(制表符分隔),它有大约 10 列和一个大标题部分。内容是这样的:

col1 col2 col3 col4 col5 col6 col7 col8 col9 col10

我不需要按 col1-9 过滤,只需要逐行查看 col10。 col10每一行的内容是这样的

int1/int2: int3,int4: int5: int6

我的过滤条件是:if int3 + int4 >= 30,我打印出来到一个新的csv文件,否则过滤掉(不打印)。

这是否可以与 AWK 结合使用 shell 脚本(逐行读取?)?非常感谢您阅读我的问题

【问题讨论】:

    标签: shell csv awk line


    【解决方案1】:

    试试这个

    awk -F'\t' -v OFS='\t' '{ t = $10
    split(t,x,":")
    split(x[2],a,",")
    }(a[1]+a[2])>=30' oldcsv > newcsv
    

    或更短:

    awk -F'\t' -v OFS='\t' '{t=$10; split(t,a,/[:,]/)}(a[3]+a[2])>=30' oldcsv > newcsv
    

    没有测试,但如果 $10 的格式是固定的,应该可以工作。

    【讨论】:

    • 那里做得很好..想知道 split 的返回类型是什么以及是否需要专门打印它@kent?
    • @woofmeow 我的 gawk 手册页告诉:return the number of fields. 不,我不需要。默认情况下为真值是 print
    • @Kent:非常感谢您的回答。由于我的 CSV 文件有一些标题行(20 行),我想保留在新的 CSV 中。你能指导我如何在你的命令中保留这些标题行吗?再次感谢
    猜你喜欢
    • 1970-01-01
    • 2012-06-30
    • 1970-01-01
    • 1970-01-01
    • 2018-09-17
    • 2013-03-08
    • 2011-07-19
    • 2013-10-15
    • 1970-01-01
    相关资源
    最近更新 更多