フォルダ内のすべてのファイルに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
。
すべての print ステートメントに入力したくない場合は、> "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