首页 > 解决方案 > 在 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。我怎样才能做到这一点?

标签: bashterminal

解决方案


您的意思是将文件的元数据附加到同一个文件?

使用 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 例如),您可以重用字节数作为字符数。


推荐阅读