如何从文件中逐行读取,计算特定字符

时间:2019-07-30 23:24:41

标签: bash sh

我在file.txt中有如下数据

é

我如何逐行阅读并获得*计数字符?

伪代码

Function UrlEncode(url)
    For i = 1 To Len(url)
        n = Asc(Mid(url,i,1))
        If (n >= 48 And n <= 57) Or (n >= 65 And n <= 90) Or (n >= 97 And n <= 122) Then
            UrlEncode = UrlEncode & Mid(url,i,1)
        Else
            ChrHex = Hex(Asc(Mid(url,i,1)))
            For j = 0 to (Len(ChrHex) / 2) - 1
                UrlEncode = UrlEncode & "%" & Mid(ChrHex,(2*j)+1,2)
            Next
        End If
    Next
End Function

预期输出: “ For”循环应从文件中逐行读取并将每一行存储在变量“ fileline”中,然后计算字符[*]并存储在变量“ charactercount”中,然后打印变量$ charactercount。对于文件中的所有文件,都必须重复此循环。我如何在“ for”循环中实现这一目标?

N4*1
NM1*IL*2
PER*IC*XM*

这不是重复的问题,因为此问题使用“ for”循环明确询问了字符数。 “使用Bash计数字符串中字符的出现次数”帖子对此帖子没有答案

2 个答案:

答案 0 :(得分:0)

tr -d -c '*\n' file.txt | awk '{print length}'

从文件中删除除星号和换行符以外的所有内容。然后打印行长。

答案 1 :(得分:0)

awk '{print gsub(/\*/,$0)}' file

要在循环中达到相同的目的:

#! /bin/bash

while read line
do
    grep -o '*' <<<"$line" | grep -c .
done < file

这应该打印*每行计数。

根据评论进行更新:

#! /bin/bash


while read line
do

    echo "$line" | awk -F"[*]" '{print NF-1}'
done < file

[ ! -s file ] && echo "no lines in file"

[ ! -s file ]与循环无关。 -s标志检查文件是否包含内容。如果有,则返回true。但是在您的情况下,您想要相反的行为,因此我们使用了!。因此,当文件为空时,它返回true,并且&&使下一条命令执行,即echo "no lines in file”