【问题标题】:Keep only second attribute from each line每行只保留第二个属性
【发布时间】:2012-12-12 22:55:51
【问题描述】:

我有一个 csv 文件,每行有 4 个属性,用逗号分隔。我试图想出一个sed 命令来只保留每行的第二个属性。关于如何做到这一点的任何想法?

【问题讨论】:

    标签: linux bash sed awk cut


    【解决方案1】:

    cut 会更好:

    cut -d "," -f 2 file.txt
    

    如果您想删除重复项,并且不介意条目的顺序,只需执行以下操作:

    cut -d "," -f 2 file.txt | sort -u
    

    要扩展到 attrs 1 和 to,只需使用:

    cut -d "," -f 1,2 file.txt | sort -u
    

    【讨论】:

    • 这行得通,如何将其扩展到 csv 中的属性 1 和 2?
    • 如果字段包含,怎么办? 1,10,21\n 2,"11,45",22\n 3,12,23\n 4,13,24
    • @anishsane 如果该字段有,,他可能不会将其作为分隔符,对吧?
    • 如果字段包含,,则整个字段用双引号括起来。请参阅我之前评论中给出的文件内容。 (可悲的是,所以 cmets 吃掉了换行符......)
    • @anishsane 如果该字段具有被视为分隔符的内容,则必须找到另一个分隔符;在您传递的示例中,我没有得到分隔字段的原因。为什么“”只包含一些数字?
    【解决方案2】:

    你不需要 sed 。最快的是cut

    cut -d, -f2 file
    

    但是,如果你想要 sed ,你可以这样做:

    sed '/[^,]*,\([^,]*\).*/ sxx\1x' file
    

    【讨论】:

      猜你喜欢
      • 2021-06-12
      • 2015-11-04
      • 2023-02-21
      • 2015-08-09
      • 1970-01-01
      • 2023-02-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多