csv文件的特定部分列的唯一条目

时间:2014-07-03 06:42:11

标签: shell csv awk scripting

在逗号分隔的csv文件中,第二列是10位数字(例如,77737480463)。 我可以通过以下命令

找出第二列的唯一条目总数
awk -F, '{print $2}' abc.csv|sort|uniq|wc -l

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

2 个答案:

答案 0 :(得分:2)

在awk中执行此操作的一种方法

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

答案 1 :(得分:0)

您是否尝试过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)写入数组。如果重复该键,则简单地替换该值。最后,我有一个每个唯一键的数组元素,所以我可以简单地计算数组中元素的数量,以获得唯一键的数量。