【问题标题】:How to use cat to lowercase large files in bash? [duplicate]如何使用 cat 小写 bash 中的大文件? [复制]
【发布时间】:2018-11-26 15:53:14
【问题描述】:

我正在使用以下命令将文本文件中的所有字符小写。

CORPUSLOWER=$(cat foobar.txt | tr '[:upper:]' '[:lower:]')
echo $CORPUSLOWER > foobar.txt

然而,问题在于 foobar.txt 大约 20gig 大,它只替换了 foobar.txt 文件的一小部分。

我的问题:如何使用 bash 将大文件转换为小写?

【问题讨论】:

  • 也许只使用 tr '[:upper:]' '[:lower:]' newfile.txt,使用更少的内存
  • 另外,无用的变量捕获。试图将整个文件读入一个 shell 变量,以便您可以将 echo 它输出到标准输出是毫无意义的,因为 tr 本身已经能够将其结果打印到标准输出(实际上并没有太多其他内容)。

标签: bash cat tr


【解决方案1】:

应该可以

tr '[:upper:]' '[:lower:]' < foobar.txt | dd of=foobar.txt conv=notrunc

或者(可能更简洁),使用临时文件

【讨论】:

    【解决方案2】:

    假设你有来自 moreutils 的sponge,你可以这样做:

    tr '[:upper:]' '[:lower:]' < foobar.txt | sponge foobar.txt
    

    sponge“吸收”所有内容,只有在看到文件末尾时才打开文件。

    【讨论】:

    • 如果你没有那个tail -n 10000000000,虽然语料库文件可能很大,但总的来说效果很好。只有1行吗?
    • jep,这很有帮助,谢谢
    猜你喜欢
    • 2018-10-04
    • 2019-01-22
    • 1970-01-01
    • 1970-01-01
    • 2013-12-24
    • 2012-07-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多