我正在尝试将一个 awk 脚本应用于一个文件夹中的所有文件,我正在使用:
for %%i in (*.txt) do (awk -f NormalizeFiles.awk "%%i" > new\"%%i")
但后来我收到消息:
Syntactic error near the unexpected element '('
我不知道出了什么问题。
答案1
您似乎正在尝试通过 awk 运行输入文件并将结果保存为不同的文件名。除非您需要非常特殊的文件命名,否则这应该可以:
for i in *.txt; do
awk -f NormalizeFiles.awk $i > $i.out
done
尽管您的问题被标记为 bash,但正如有人指出的那样,您的语法不是 bash,例如滥用括号。 %% 语法未正确使用,并且它似乎与您的目标没有密切关系;但是,你应该检查一下http://www.tldp.org/LDP/abs/abs-guide.pdf如果你想了解更多。
答案2
awk
可以自己写入不同的文件。
例如
awk '{print > "new/"FILENAME}' *.txt
您可以在脚本中使用类似的东西NormalizeFiles.awk
。
如果您不想> "new/"FILENAME
为每个打印语句键入,您可以执行以下操作:
awk 'FNR == 1 { out = "new/"FILENAME } ; { print > out }' *.txt
out
每当脚本看到FNR == 1
新文件的第一行 ( )时,就会更改输出文件(在变量中)。
顺便说一句,如果您的脚本具有#!/usr/bin/awk -f
第一行并且可以使用 执行chmod
,则可以直接运行它,就像运行可执行文件或其他脚本./NormalizeFiles.awk
一样。#!/bin/bash
#!/usr/bin/perl