微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何使用算术扩展和 wc 将 bash 脚本中文件的字符数除以单词数

如何解决如何使用算术扩展和 wc 将 bash 脚本中文件的字符数除以单词数

这是我的作品:

wc -w $3/lab1.txt

words=$(wc -w $3/lab1.txt)

wc -m $3/lab1.txt

characters=$(wc -m $3/lab1.txt)

echo $((characters / words))

我设置的两个变量工作得很好,它们给出了正确的输出,但是当我尝试使用算术扩展从单词中划分字符时。我收到一个错误,我不知道我是否可以这样做。

错误如下: enter image description here

解决方法

您将 wc -wwc -m 的整个输出分配给变量,变量后跟文件名。所以你的变量实际上是:

words="3 /Users/example/lab1.txt"
characters="16 /Users/example/lab1.txt"

现在当 Bash 计算 $(( characters / words )) 时,它实际上是在做:

16 /Users/example/lab1.txt / 3 /Users/example/lab1.txt

在算术扩展中,未设置的变量被视为零,因此 Users=0 和 Bash 尝试进行除法,并为您提供错误输出。

您应该从 wc -w 中提取输出的数字部分。一个例子是 cut:

words=$(wc -w $3/lab1.txt | cut -d' ' -f1)
characters=$(wc -m $3/lab1.txt | cut -d' ' -f1)

echo $((characters / words))  # Voila!

如果您对前导空格没有信心,请使用 AWK:

words=$(wc -w $3/lab1.txt | awk '{print $1}')
,

您以错误的方式使用了 wc 命令。如果您想在输出中获得数字 - 并且数字 - ,wc 必须从标准输入读取。因此,如果你做一个

words=$(wc -w <$3/lab1.txt)
characters=$(wc -m <$3/lab1.txt)
echo $((characters / words))

您不会再收到错误消息。

这应该可以回答您的问题,但有一点需要注意:由于您使用的是 bash,因此除法会被截断为整数,并且您不必要地对输入文件进行了两次解析。如果这是您的应用程序的问题,您可能会彻底重新考虑您的方法。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。