【问题标题】:How to extract text with fixed length in delimited file如何在分隔文件中提取固定长度的文本
【发布时间】:2018-01-30 18:05:16
【问题描述】:

我想从分隔文件中提取一个字段。

以下是我的文件内容-

A,B,C,"01/02/2015,01/03/2016,02/26/2017",01,56
A,B,G,"01/02/2012,01/03/2011,02/26/2010",01,56

我只想检索每行中的第一个日期,并将整个列替换为该值。

输出

A,B,C,01/02/2015,01,56
A,B,G,01/02/2012,01,56

我知道我可以将 "s 中的值拆分为逗号分隔值,但不确定如何仅限制第一个值并省略其他值。

请指导我。

【问题讨论】:

    标签: awk sed cut


    【解决方案1】:
    sed 's/"\([^,]*\)[^"]*"/\1/'
    

    即找到一个双引号,记住它后面的逗号,然后用记住的部分替换下一个双引号。

    要更认真地使用 CSV,请参阅 Perl 和 Text::CSV_XS

    【讨论】:

    • 如果你希望你也可以添加这个,或多或少相同,在 gawk awk '{print gensub(/"([^,]*).*"/,"\\1","")}' file
    【解决方案2】:

    考虑到您的 Input_file 与显示的示例相同,如果是,那么关注 awk 可能会对您有所帮助。

    awk -F',|"' '{print $1,$2,$5,$(NF-1),$NF}' OFS=,   Input_file
    

    输出如下。

    A,B,01/02/2015,01,56
    A,B,01/02/2012,01,56
    

    解释:

    -F',|"':在此处为 Input_file 的每一行设置字段分隔符为 ,"

    print: print 是开箱即用的 awk 关键字,用于打印行/变量等。

    $1,$2,$5,$(NF-1),$NF:打印$1(当前行的第一个字段),$2(当前行的第二个字段),$5(当前行的第五个字段),$(NF-1)(seconf当前行的最后一个字段行)和$NF(当前行的最后一个字段)。

    OFS=,:此处将输出字段分隔符设置为逗号。

    Input_file:在此提及 Input_file 名称。

    【讨论】:

    • 请记住,字段 4 为空,因为它位于 ," 之间
    • @kvantour,我没有提到代码中的第 4 列。
    • 我知道,这是一个一般性评论,表明这种微妙之处,以防万一有人想知道为什么$5而不是$4
    猜你喜欢
    • 2014-05-19
    • 2015-04-20
    • 1970-01-01
    • 1970-01-01
    • 2019-07-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多