我使用以下命令来计数文件第一行中的;数:
awk -F';' '(NR==1){print NF;}' $filename我想对同一文件中的所有行做同样的操作。也就是说,在文件中的所有行上计数;的数量。
我所拥有的:
$ awk -F';' '(NR==1){print NF;}' $filename
11我想要的是:
11
11
11
11
11
11发布于 2020-02-21 11:06:56
每一行计算;的直接向前方法应该是:
awk '{print gsub(/;/,"&")}' Input_file要删除空行,请尝试:
awk 'NF{print gsub(/;/,"&")}' Input_file若要以OP的方式执行此操作,请将NF值从1降为1。
awk -F';' '{print (NF-1)}' Input_file或
awk -F';' 'NF{print (NF-1)}' Input_file发布于 2020-02-21 11:10:07
您的代码返回的数字大于分号的个数;NF是在分号上拆分得到的字段数(例如,如果有一个分号,则行被分成两部分)。
如果您想从每一行中添加这个数字,这很容易;
awk -F ';' '{ sum += NF-1 } END { print sum }' "$filename"如果字段的数量是一致的,您也可以只计算行数和乘;
awk -F ':' 'END { print NR * (NF-1) }' "$filename"但是,如果不能保证所有行都包含相同数量的字段,这显然是错误的。
发布于 2020-02-21 11:13:16
我想说,你可以用以下方法解决你的问题:
awk -F';' '{if (NF) {a += NF-1;}} END {print a}' test.txt您希望对所做的所有事件(变量a)保持运行计数。
由于NF将返回字段数,即比分隔符数多一个字段,因此需要为每一行减去1。这是NF-1部分。
但是,您不希望对没有分隔符的行计算"-1“。要跳过这些部分,您需要if (NF)部分。
下面是一个(也许是人为的)例子:
$ cat test.txt
;;
; ; ; ;;
; asd ;;a
a ; ;
$ awk -F';' '{if (NF) {a += NF-1;}} END {print a}' test.txt
12请注意末尾的空行(针对“无分隔符”进行测试)。
https://stackoverflow.com/questions/60337115
复制相似问题