在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