ループを使用してフォルダ内の複数のファイルに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

すべての 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

関連情報