2017-08-04 163 views
0

我不是一个scripter,非常适合初学者。我将从超过1950个目录的* .bat文件中删除文本。我有删除我需要的部分文件的正确命令,并且我可以将这些文件复制到新的输出文件(不覆盖旧结构)。AWK - 如何在多个目录中更改多个文件中的内容

实施例:

bin\awk "/^:COMMANDS/,0" F1\kits\test\engine\blah.bat > F2\kits\test\engine\blah.bat 

据测试并做这项工作。

现在我想对其余1949个目录中的所有其他文件执行此操作。

所以理论上这是需要做什么:

bin\awk "/^:COMMANDS/,0" F1\kits\test\engine\blah.bat > F2\kits\test\_engine\blah.bat 
bin\awk "/^:COMMANDS/,0" F1\kits\test1\engine\blah.bat > F2\kits\test1\engine\blah.bat 
bin\awk "/^:COMMANDS/,0" F1\kits\test2\engine\blah.bat > F2\kits\test2\engine\blah.bat 
bin\awk "/^:COMMANDS/,0" F1\kits\test3\engine\blah.bat > F2\kits\test3\engine\blah.bat 
bin\awk "/^:COMMANDS/,0" F1\kits\test4\engine\blah.bat > F2\kits\test4\engine\blah.bat 

不断变化的因素是目录(test*)。但如果能以更高效的方式完成这将是非常好的。

这是在Windows上完成的(宁愿* nix ...)。我怎样才能把这个包装成一个很好的脚本?

+0

像你需要标记你的问题听起来更与Windows中使用的任何shell相比awk。我在Linux中使用Bash,我会这样:'for in in */*/*。txt;做awk'{print FILENAME,$ 1}'$ i> $ {i%/ *}/output.txt; (这不适用于你)处理子目录子目录中的文件。 –

+0

感谢您的推荐:-)我更新了一些更多的标签,但作为书面,我非常新手...... :-) – Kanutten

+0

请阅读[在什么情况下我可以添加“紧急”或其他类似的短语,以我的问题,为了以获得更快的答案?](// meta.stackoverflow.com/q/326569) - 总结是,这不是解决志愿者的理想方式,并且可能适得其反。请不要将这添加到您的问题。 – halfer

回答

0

你可以尝试这样的:

for x in F1\kits\*; do y=$(echo $x | tr '\\' ' ' | awk '{print $3}'); echo $y; done 

要看看你得到testtest1等,如果是的话试试你的命令:

for x in F1\kits\*; do 
    y=$(echo $x | tr '\\' ' ' | awk '{print $3}') 
    bin\awk "/^:COMMANDS/,0" F1\kits\$y\engine\blah.bat > F2\kits\$y\_engine\blah.bat 
done 
+0

非常感谢您的输入!非常感激。 – Kanutten

相关问题