如何计算第二个值的出现次数,例如:"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为什么即使我键入字段=2 也无法获得第二个元素
您可以通过传递-F逗号字段分隔符来简化操作。
像这样:
awk -F, '{map[$2]++} END { for (key in map) { print key, map[key] } }' file.txt
idk为什么即使我键入fields=2 也无法获得第二个元素
当您向print
提供多个参数时,GNUAWK
确实使用输出字段分隔符(OFS
(连接了这些参数,默认情况下为空格,但您通知cut
它应该将,
视为分隔符。
如果必须使用通过管道连接到cut
的awk
输出,请确保awk
的输出字段分隔符和cut
的分隔符相同,基本上有三个选项,
awk 'BEGIN{OFS=","}END{print 11,22,33}' emptyfile.txt | cut --delimiter=',' --fields=2
awk 'END{print 11,22,33}' emptyfile.txt | cut --delimiter=' ' --fields=2
awk 'BEGIN{OFS="t"}END{print 11,22,33}' emptyfile.txt | cut --fields=2
所有这些都给出相同的输出
22
说明:第一个选项是在两个命令中显式地将OFS
和--delimiter
设置为相同的字符(例如,
(,第二个选项是将--delimiter
设置为OFS
的默认值,即空格,第三个选项是设置OFS
为--delimiter
的默认值(即TAB字符(。
警告在大多数情况下,不需要将awk
输出管道传输到cut
,因为任务可能完全在awk
中完成。