【发布时间】:2014-08-24 03:52:49
【问题描述】:
在逗号分隔的 csv 文件中,第 2 列是 10 位数字(例如 7737480463)。 我可以通过以下命令找出第二列的唯一条目总数
awk -F, '{print $2}' abc.csv|sort|uniq|wc -l
但我想根据前 5 位(例如 77374)找出第二列的唯一条目总数。
【问题讨论】:
在逗号分隔的 csv 文件中,第 2 列是 10 位数字(例如 7737480463)。 我可以通过以下命令找出第二列的唯一条目总数
awk -F, '{print $2}' abc.csv|sort|uniq|wc -l
但我想根据前 5 位(例如 77374)找出第二列的唯一条目总数。
【问题讨论】:
在 awk 中的一种方法
awk -F, '!x[substr($2,0,5)]++{i++}END{print i}' abc.csv
【讨论】:
你试过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)写入数组。如果键被重复,则值被简单地替换。最后我为每个唯一键都有一个数组元素,所以我可以简单地计算数组中的元素数量来获得唯一键的数量。
【讨论】:
{ for(i in count) x++; print x;