如何使用tr命令在多个文件中删除换行符?

4

我有一组几百个.txt文件需要分析(使用NSP进行ngram分析),我需要从每个文件中删除所有换行符。我可以使用tr一个一个地处理:

$ tr -d "\n\r" < input1.txt > output1.txt

如何一次性为整个目录的文件执行此操作?
1个回答

13

这将在 .txt 前添加 -out。除了 .txt 之外,您没有指定文件名的其他信息,因此希望您没有将输入文件命名为 foo-out.txt 等。

for f in *.txt
do
  tr -d "\n\r" < "$f" > $(basename "$f" .txt)-out.txt
done

2
完美。简单直接。我知道我不应该在这里说“谢谢”,但由于我没有足够的声望来+1,所以还是要感谢一下。 - Ted Maclin
1
@TedMaclin:请注意,如果您获得更多的输入文件并希望在同一目录中重新运行此脚本,则会重新处理“*-out.txt”文件。但我想这没关系,因为它们不会被修改,而且“tr”非常快。但我建议给输出文件一个不同的扩展名,这样您仍然可以使用简单的“*.txt”全局通配符来获取输入文件。或者更好的是,将输出文件放入单独的目录中。 - PM 2Ring
单独的目录是个好主意。按照现有代码,重复运行会生成 foo-out-out.txt 和 foo-out-out-out.txt ... :p - Nick Russo
如果我想在相同的文件名下进行覆盖,我该怎么做呢? - Mangoski
最简单的方法是创建新文件,检查它们是否包含所需内容,然后删除原始文件。如果这些新文件在一个新的(子)目录中,它们可以与原始文件具有相同的名称,然后轻松地移动到正确的位置。 - Nick Russo
1
希望你的文件不叫做 input 1.txt。让我来修复一下。 - chx

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接