0

在 Ubuntu 上,我在一棵名为“output.txt”的树中有一堆文件。对于每个文件,我想用“排序”按字母顺序对行进行排序。我考虑过

寻找 。-name output.txt -exec 排序{} \;

但这会将排序的行输出到控制台,而不是更新我想要的原始文件。

4

4 回答 4

3
find . -name output.txt -exec sort{} -o{} \;
于 2009-06-03T13:20:15.363 回答
1

Fortran,

我会做一些不同的事情,我不会对文件进行排序。以防万一在排序后将任何新内容添加到文件中。这是我要做的:

  • 镜像具有“output.txt”文件的目录树并将排序后的文件放在那里

像这样:

#!/bin/bash 

LIST=`find $1 -name output.txt`

for i in $LIST ; do
        X=`dirname $i`
        mkdir -p "sorted/$X"
        sort "$i" -o "sorted/$i"
done

以上需要一点润色,mkdir 周围应该有一个“if”,并且应该检查 $1 的完整性

给你这个:

原文:

mytest
mytest/ccc
mytest/ccc/f
mytest/ccc/f/output.txt
mytest/ccc/d
mytest/ccc/d/output.txt
mytest/ccc/e
mytest/ccc/e/output.txt
mytest/bbb
mytest/bbb/f
mytest/bbb/d
mytest/bbb/e
mytest/aaa
mytest/aaa/f
mytest/aaa/f/output.txt
mytest/aaa/d
mytest/aaa/d/output.txt
mytest/aaa/e
mytest/aaa/e/output.txt

输出:

sorted
sorted/mytest
sorted/mytest/ccc
sorted/mytest/ccc/f
sorted/mytest/ccc/f/output.txt
sorted/mytest/ccc/d
sorted/mytest/ccc/d/output.txt
sorted/mytest/ccc/e
sorted/mytest/ccc/e/output.txt
sorted/mytest/aaa
sorted/mytest/aaa/f
sorted/mytest/aaa/f/output.txt
sorted/mytest/aaa/d
sorted/mytest/aaa/d/output.txt
sorted/mytest/aaa/e
sorted/mytest/aaa/e/output.txt

最后一件事我认为排序输出文件被写入 tmp 文件,然后在排序完成后重命名,否则输出文件可能会在读取所有内容之前截断输入文件。就像 sed 的就地选项一样。

于 2009-06-04T03:58:39.153 回答
0

尝试这个

csh <enter>

foreach i ( `find . -type f -name output.txt -print`) <enter>
   cat $i | sort > $.sorted <enter>
end <enter>

您将生成文件的排序副本。

于 2009-06-03T13:18:14.433 回答
-1

我没有大量使用Linux,所以我可能会弄错,但你不应该能够控制它StdOut吗?

find . -name output.txt -exec sort{} \ > output.txt
于 2009-06-03T13:14:10.757 回答