我正在远程处理群集并提供数千个工作。一些工作提前崩溃。我需要将这些作业的输出文件(小于1KB)移动到另一个文件夹并再次启动它们。我猜发现可以用以下方式移动它们:
find . -size -1000c -exec mv {} ../crashed \;
但我还需要重启这些崩溃的作业。在输出文件夹中的一堆文件夹中输出文件,我需要文件夹名称和文件名(没有说明)。
我猜sed或/和awk可以很容易地做到这一点,但我不确定如何。顺便说一句,我正在研究BASH shell。
我正在尝试使用cut,这似乎有效:
for i in $( find . -size -1000c )
do
FOLDER=$(echo "${i%.*}" | cut -d'/' -f2)
FILENAME=$(echo "${i%.*}" | cut -d'/' -f3)
done
但使用 sed 或 awk 会不会更好?怎么样?
答案 0 :(得分:1)
Sed是一个流编辑器,因为你没有改变任何东西,所以我不会在这种情况下使用它。您可以使用awk而不是像这样剪切:
FOLDER=$(echo "${i%.*}" | awk -v FS="/" '{ print $2 }')
其中-v FS="/"
指定变量FS(字段分隔符,是斜杠,与切割中的-d选项相同)和print $2
告诉awk仅打印第二个领域。
你在那里的其他指令也一样。在你的情况下,你必须做的很简单,所以实际切割切割它:D
我通常使用awk来处理更复杂的任务,涉及多个文件和/或数学计算。
修改强>
请注意我在这里使用gawk(GNU的awk实现)。我不确定你是否可以在其他实现中使用-v
选项传递变量值,他们将有办法实现它。