AWK - 如何在多个目录中更改多个文件中的内容

时间:2017-08-04 07:36:00

标签: bash shell awk scripting

我不是一个脚本,非常初学者。我将从1950多个目录中删除* .bat文件中的文本。我有正确的命令删除我需要的部分文件,我可以将它们复制到一个新的输出文件(不覆盖旧的结构)。

示例:

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 ...)。如何将其包装成一个漂亮的脚本?

1 个答案:

答案 0 :(得分: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