如何使用循环将 awk 脚本应用于一个文件夹中的多个文件

如何使用循环将 awk 脚本应用于一个文件夹中的多个文件

我正在尝试将一个 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

相关内容