bash - 在 bash 脚本中的文本文件中写入字数
问题描述
我对 bashscript 很陌生,如何在文本文件本身中写入字数、字长和字符大小?我目前的代码是:
#!bin/bash/
echo "start"
cat file #print file.txt
wc -m file #character count
wc -w file # word count
wc -c file # size
echo "end"
我想将终端输出附加到我的文本文件中。文本文件应该是这样的:
...文本此文件的大小:x,字数:x,字符数:x。我怎样才能做到这一点?
解决方案
您的意思是将文件的元数据附加到同一个文件?
使用 GNU wc
:
#!/bin/bash
if [[ $# -lt 1 ]]; then
echo "Usage: ${0##*/} FILE ..." >&2
exit 1
fi
for file do
wc -cwm "$file" |
awk -v file="$file" \
'{print "File size: "$3", word count: "$1", character count: "$2 >> file}'
done
也适用于 Busybox wc
。您可以提供多个文件。
请注意,如果wc
给定多个标志,它总是以相同的顺序打印数字,而不管给定标志的顺序如何。
来自man wc
(GNU)
以下选项可用于选择打印哪些计数,始终按以下顺序:换行符、字、字符、字节、最大行长。
但是,POSIX 是这样说的:
默认情况下,标准输出应包含以下形式的每个输入文件的条目:
"%d %d %d %s\n", <newlines>, <words>, <bytes>, <file>
如果指定了 -m 选项,则字符数应替换此格式中的字段。
来源:https ://pubs.opengroup.org/onlinepubs/9699919799/utilities/wc.html
我没有在其他平台上进行过测试,但显然,符合 POSIX 标准wc
需要两个单独的调用来获取字节数和字符数。使用一个的原因是为了避免在计数之间更改文件。
如果您知道该文件是 ASCII(而不是 UTF-8 例如),您可以重用字节数作为字符数。