首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >列中“;”的计数数

列中“;”的计数数
EN

Stack Overflow用户
提问于 2020-02-21 10:52:47
回答 4查看 101关注 0票数 1

我使用以下命令来计数文件第一行中的;数:

代码语言:javascript
复制
awk -F';' '(NR==1){print NF;}' $filename

我想对同一文件中的所有行做同样的操作。也就是说,在文件中的所有行上计数;的数量。

我所拥有的:

代码语言:javascript
复制
$ awk -F';' '(NR==1){print NF;}' $filename
11

我想要的是:

代码语言:javascript
复制
11
11
11
11
11
11
EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2020-02-21 11:06:56

每一行计算;的直接向前方法应该是:

代码语言:javascript
复制
awk '{print gsub(/;/,"&")}' Input_file

要删除空行,请尝试:

代码语言:javascript
复制
awk 'NF{print gsub(/;/,"&")}' Input_file

若要以OP的方式执行此操作,请将NF值从1降为1。

代码语言:javascript
复制
awk -F';' '{print (NF-1)}' Input_file

代码语言:javascript
复制
awk -F';' 'NF{print (NF-1)}' Input_file
票数 3
EN

Stack Overflow用户

发布于 2020-02-21 11:10:07

您的代码返回的数字大于分号的个数;NF是在分号上拆分得到的字段数(例如,如果有一个分号,则行被分成两部分)。

如果您想从每一行中添加这个数字,这很容易;

代码语言:javascript
复制
awk -F ';' '{ sum += NF-1 } END { print sum }' "$filename"

如果字段的数量是一致的,您也可以只计算行数和乘;

代码语言:javascript
复制
awk -F ':' 'END { print NR * (NF-1) }' "$filename"

但是,如果不能保证所有行都包含相同数量的字段,这显然是错误的。

票数 1
EN

Stack Overflow用户

发布于 2020-02-21 11:13:16

我想说,你可以用以下方法解决你的问题:

代码语言:javascript
复制
awk -F';' '{if (NF) {a += NF-1;}} END {print a}' test.txt

您希望对所做的所有事件(变量a)保持运行计数。

由于NF将返回字段数,即比分隔符数多一个字段,因此需要为每一行减去1。这是NF-1部分。

但是,您不希望对没有分隔符的行计算"-1“。要跳过这些部分,您需要if (NF)部分。

下面是一个(也许是人为的)例子:

代码语言:javascript
复制
$ cat test.txt 
;;
; ; ; ;;
; asd ;;a 
a ; ;

$ awk -F';' '{if (NF) {a += NF-1;}} END {print a}' test.txt
12

请注意末尾的空行(针对“无分隔符”进行测试)。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/60337115

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档