一尘不染

在Unix上按行/字段计数字符的出现

linux

给定一个包含这样数据的文件(即stores.dat文件)

sid|storeNo|latitude|longitude
2tt|1|-28.0372000t0|153.42921670
9|2t|-33tt.85t09t0000|15t1.03274200

什么命令返回每行出现“ t”字符的次数?

例如。会返回:

count   lineNum
   4       1
   3       2
   6       3

另外,要按字段计数出现次数,返回以下结果的命令是什么?

例如。输入第2列和字符“ t”

count   lineNum
   1       1
   0       2
   1       3

例如。输入第3列和字符“ t”

count   lineNum
   2       1
   1       2
   4       3

阅读 311

收藏
2020-06-07

共1个答案

一尘不染

要计算每行字符的出现次数,您可以执行以下操作:

awk -F'|' 'BEGIN{print "count", "lineNum"}{print gsub(/t/,"") "\t" NR}' file
count lineNum
4       1
3       2
6       3

要计算每个字段/列中字符的出现次数,您可以执行以下操作:

第2栏:

awk -F'|' -v fld=2 'BEGIN{print "count", "lineNum"}{print gsub(/t/,"",$fld) "\t" NR}' file
count lineNum
1       1
0       2
1       3

第3栏:

awk -F'|' -v fld=3 'BEGIN{print "count", "lineNum"}{print gsub(/t/,"",$fld) "\t" NR}' file
count lineNum
2       1
1       2
4       3
  • gsub()函数的返回值是进行替换的次数。所以我们用它来打印数字。
  • NR 保留行号,因此我们用它来打印行号。
  • 对于特定字段的打印事件,我们创建一个变量fld,然后输入要从中提取计数的字段编号。
2020-06-07