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