如何计算第二个值的出现次数,例如:“Rv1408”?我想获取并计算每行中第二个元素的出现总数。<.br>
file.txt:
Rv0729,Rv1408,Rv1408
Rv0162c,Rv0761,Rv1862,Rv3086
Rv2790c,Rv1408
Rv2fd90c,Rv1408
Rv1862,Rv3086
Rvsf62,Rv3086
我尝试(不工作)输入:
awk ' { tot[$0]++ } END { for (i in tot) print tot[i],i } ' m.txt | sort | cut --delimiter=',' --fields=1
预期输出:
total no of occurences:
Rv1408: 3
Rv0761:1
Rv3086: 2
idk为什么即使i type fields=2,i也无法获得第二个元素
2条答案
按热度按时间rekjcdws1#
您可以通过传递-F逗号字段分隔符来简化此操作。
就像这样:
tag5nh1u2#
idk为什么即使i type fields=2,i也无法获得第二个元素
当你提供一个以上的参数给
print
时,GNUAWK
确实使用 * 输出字段分隔符 *(OFS
)来连接这些参数,默认情况下是空格,但是你通知cut
它应该将,
作为分隔符。如果您必须使用
awk
输出(通过管道传输到cut
),请确保awk
的输出字段分隔符与cut
的分隔符相同,您基本上有三种选择:它们都给予相同输出
说明:第一个选项是在两个命令中将
OFS
和--delimiter
显式设置为相同的字符(示例中为,
),第二个选项是将--delimiter
设置为默认值OFS
,即空格,第三个选项是将OFS
设置为默认值--delimiter
,即制表符。警告在大多数情况下,不需要将
awk
输出通过管道传输到cut
,因为任务可能完全在awk
中完成