在Ubuntu上,我在树中有一堆文件,都称为'output.txt'。对于每个文件,我想用“排序”按字母顺序对行进行排序。我认为如何按字母顺序排列一堆文件,递归地
找到。 -name output.txt -exec sort {} \;
但这将排序的行输出到控制台,而不是更新我想要的原始文件。
在Ubuntu上,我在树中有一堆文件,都称为'output.txt'。对于每个文件,我想用“排序”按字母顺序对行进行排序。我认为如何按字母顺序排列一堆文件,递归地
找到。 -name output.txt -exec sort {} \;
但这将排序的行输出到控制台,而不是更新我想要的原始文件。
find . -name output.txt -exec sort{} -o{} \;
试试这个
csh <enter>
foreach i (`find . -type f -name output.txt -print`) <enter>
cat $i | sort > $.sorted <enter>
end <enter>
你会生成文件的排序副本。
现在是正确的。以前的版本只生成一个包含所有行的文件。抱歉。 – Luixv 2009-06-03 13:24:37
的Fortran,
我会做有点不同,我不会将文件放入自行解决。在进行排序之后,只要将任何新的内容添加到文件中即可。这里是我会做什么:
像这样的目录树:
#!/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应该有一个'如果'周围,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
最后一件事情我觉得排序输出文件writen到tmp文件,然后在排序完成更名,否则输出文件可能截断在读取所有内容之前的输入文件。就像sed的inplace选项一样。
看起来像是在工作(需要一段时间,所以不能确定)。我可以发誓我尝试了类似的东西(是不是总是这样?)无论如何,你摇滚。 – 2009-06-03 13:26:32
你真的可以使用sort来使用与输入文件相同的输出文件吗?我对此表示怀疑。 – lothar 2009-06-03 15:09:26
@lothar无论你是否怀疑它,它仍然会工作:-p排序程序读取整个文件,排序内存中的行,然后写入输出 – fortran 2009-06-03 15:20:26