1つのawkスクリプトを1つのフォルダー内のすべてのファイルに適用しようとしています。
for %%i in (*.txt) do (awk -f NormalizeFiles.awk "%%i" > new\"%%i")
しかし、私はメッセージを受け取ります:
Syntactic error near the unexpected element '('
何が問題なのかわかりません。
入力ファイルを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 を確認してください。
awk
は、単独で異なるファイルに書き込むことができます。
例えば.
awk '{print > "new/"FILENAME}' *.txt
NormalizeFiles.awk
スクリプト内でそのようなものを使用できます。
すべての印刷ステートメントに対して> "new/"FILENAME
を入力したくない場合は、次のようにすることができます。
awk 'FNR == 1 { out = "new/"FILENAME } ; { print > out }' *.txt
これにより、スクリプトが新しいファイルの最初の行(FNR == 1
)を見つけるたびに、出力ファイル(変数out
内)が変更されます。
ところで、スクリプトの最初の行に#!/usr/bin/awk -f
があり、chmod
を使用して実行可能にした場合、./NormalizeFiles.awk
として直接実行できます。実行可能#!/bin/bash
または#!/usr/bin/Perl
などのスクリプトの場合と同じです。