【问题标题】:Unique enties of a specific partial column of csv filecsv 文件特定部分列的唯一条目
【发布时间】:2014-08-24 03:52:49
【问题描述】:

在逗号分隔的 csv 文件中,第 2 列是 10 位数字(例如 7737480463)。 我可以通过以下命令找出第二列的唯一条目总数

awk -F, '{print $2}' abc.csv|sort|uniq|wc -l

但我想根据前 5 位(例如 77374)找出第二列的唯一条目总数。

【问题讨论】:

    标签: shell csv awk scripting


    【解决方案1】:

    在 awk 中的一种方法

    awk -F, '!x[substr($2,0,5)]++{i++}END{print i}' abc.csv
    

    【讨论】:

      【解决方案2】:

      你试过awk的substr()函数吗?

      awk -F, '{ print substr($2,1,5) }' abc.csv | sort | uniq | wc -l
      

      或者你可以这样做:

      awk -F, '{print $2}' abc.csv | cut -c 1-5 | sort | uniq | wc -l
      

      但我认为您可以使用 awk 一口气完成所有操作:

      awk -F, '{ count[substr($2,0,5)] = 1; } END { for(i in count) x++; print x; }' abc.csv 
      

      Awk 具有可以将字符串作为键的数组(关联数组)。我使用第二列的前五个字符 (substr($2,0,5)) 作为键并将一些值(在本例中为 1)写入数组。如果键被重复,则值被简单地替换。最后我为每个唯一键都有一个数组元素,所以我可以简单地计算数组中的元素数量来获得唯一键的数量。

      【讨论】:

      • 最后一个示例不起作用,因为您在计数中使用 i,然后手动增加 i。尝试做类似{ for(i in count) x++; print x;
      • @Mithrandir 请解释第三种方法(一举使用 awk)
      • @user752590 : 添加了一些希望解释的文字
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-02-27
      • 1970-01-01
      • 1970-01-01
      • 2016-12-29
      • 2013-04-01
      • 1970-01-01
      相关资源
      最近更新 更多