2013-06-05 75 views
0

我正在遠程處理羣集並提供幾千個作業。有些工作很早就崩潰了我需要將這些作業的輸出文件(小於1KB)移動到另一個文件夾並重新啓動它們。我想找到可以像他們一樣移動它們:刪除小於cetain大小的文件並提取文件名

find . -size -1000c -exec mv {} ../crashed \; 

但我還需要重新啓動這些崩潰的作業。在輸出文件夾中的一堆文件夾中輸出文件,我需要分開文件夾名稱和文件名(不含任何隔離)。

我想sed或/和awk可以輕鬆做到這一點,但我不知道如何。順便說一句,我在BASH shell上工作。

我試圖用切割,這似乎是工作:

for i in $(find . -size -1000c) 
do 
FOLDER=$(echo "${i%.*}" | cut -d'/' -f2) 
FILENAME=$(echo "${i%.*}" | cut -d'/' -f3) 
done 

但使用sed的AWK豈不是更好?如何?

回答

1

Sed是一個流編輯器,既然你沒有改變任何東西,我不會在這種情況下使用它。你可以用awk,而不是切這樣的:

FOLDER=$(echo "${i%.*}" | awk -v FS="/" '{ print $2 }') 

其中-v FS="/"指定變量FS(字段分隔符,是一條斜線,一種同樣的,你在切-d選項做什麼)和print $2告訴awk只打印第二個字段。

其他的指令也一樣。在你的情況下,你必須做的很簡單,所以實際上削減削減它:D

我通常使用awk進行更復雜的任務,涉及多個文件和/或數學計算。

編輯:

請注意,我用的gawk這裏(由GNU awk的實現)。我不確定你可以在其他實現中通過-v選項傳遞變量值,他們將有辦法做到這一點。

+0

它的工作表示感謝。 – maynak

相關問題