Shell脚本:如何获得用逗号分隔的第二个元素




如何计算第二个值的出现次数,例如:"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它应该将,视为分隔符。

如果必须使用通过管道连接到cutawk输出,请确保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中完成。

相关内容

  • 没有找到相关文章

最新更新