AWK - 如何在多个目录中更改多个文件中的内容
问题描述:
我不是一个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 ...)。我怎样才能把这个包装成一个很好的脚本?
答
你可以尝试这样的:
for x in F1\kits\*; do y=$(echo $x | tr '\\' ' ' | awk '{print $3}'); echo $y; done
要看看你得到test
,test1
等,如果是的话试试你的命令:
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
像你需要标记你的问题听起来更与Windows中使用的任何shell相比awk。我在Linux中使用Bash,我会这样:'for in in */*/*。txt;做awk'{print FILENAME,$ 1}'$ i> $ {i%/ *}/output.txt; (这不适用于你)处理子目录子目录中的文件。 –
感谢您的推荐:-)我更新了一些更多的标签,但作为书面,我非常新手...... :-) – Kanutten
请阅读[在什么情况下我可以添加“紧急”或其他类似的短语,以我的问题,为了以获得更快的答案?](// meta.stackoverflow.com/q/326569) - 总结是,这不是解决志愿者的理想方式,并且可能适得其反。请不要将这添加到您的问题。 – halfer