Unix awk-每个唯一值的出现次数

时间:2018-10-22 16:45:54

标签: unix awk count uniq

在Unix中,我正在为字段中的第一个字符打印唯一值。我还在打印唯一字段长度的计数。 现在,我想同时做这两个事情。在SQL中很容易做到,但是我不确定在awk(或grep,sed等)中如何在Unix中做到这一点。

打印第一个UNIQ主字符

awk -F'|' '{print substr($61,1,1)}' file_name.sqf | sort | uniq

打印长度为8、10、15的字段

awk -F'|' 'NR>1 {count[length($61)]++}  END {print count[8] ", " count[10] ", " count[15]}' file_name.sqf | sort | uniq

期望的输出

first char, length 8, length 10, length 15
a, 10, , 150
b, 50, 43, 31
A, 20, , 44
B, 60, 83, 22

以较高或较低的'a'开头的字段的长度不得为10。

输入文件是|不带标题的定界.sqf。该字段为varChar 15。

样本输入

56789 | someValue | aValue | otherValue | 712345
46789 | someValue | bValue | otherValue | 812345
36789 | someValue | AValue | otherValue | 912345
26789 | someValue | BValue | otherValue | 012345
56722 | someValue | aValue | otherValue | 712345
46722 | someValue | bValue | otherValue | 812345

所需的输出

a: , , 2
b: 1, , 1
A: , , 1
B: , 1,

'a'具有两个长度为15的实例 'b'有一个实例,每个实例的长度分别为8和15 “ A”的一个实例的长度为15 “ B”具有一个长度为10的实例

谢谢。

1 个答案:

答案 0 :(得分:0)

我认为您需要一个更好的示例输入文件,但是我想这就是您要寻找的

opener

请注意,由于所有长度均为6,因此我打印的是8,而不是8。使用正确的数据,您应该能够得到期望的输出。但是请注意,该顺序不会保留。