我在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计数字符串中字符的出现次数”帖子对此帖子没有答案
答案 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”
。