【问题标题】:Writing word count in a text file in bash script在 bash 脚本中的文本文件中写入字数
【发布时间】:2021-11-07 17:38:38
【问题描述】:

我对 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。我该怎么做?

【问题讨论】:

  • 请发布一些带有相关预期输出的示例数据。不要将它们作为 cmets、图像、表格或非现场服务的链接发布,而是使用文本并将它们包含在您的原始问题中。谢谢。
  • 这可能会有所帮助:m=$(wc -m file | awk '{print $1}'); echo "$m"
  • 我建议将其缩减为单个wc 调用,例如wc -mwc file;下一步是将此输出捕获到变量中,例如:read -r chars words bytes fname < <(wc -mwc file);此时,您可以使用变量($chars$words$bytes)打印消息,将所述输出附加到file

标签: bash terminal


【解决方案1】:

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

使用 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),您可以将字节数重新用于字符数。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-10-22
    • 2011-02-26
    • 2018-09-04
    • 2020-06-18
    • 1970-01-01
    • 2012-05-12
    • 2019-12-30
    相关资源
    最近更新 更多