how do i loop through the current directory and process only *.txt files
awkではなく、OSに関する質問です。
各ファイル名は、awk 内の FILENAME 変数に格納されます。
悪夢のような Windows の引用の問題を回避するには、スクリプトをファイル (例: という名前foo.awk
) に入れて、そのファイルを実行awk -f foo.awk <input_files>
し<input_files>
ます*.txt
。
投稿したスクリプトに基づいて、foo.awk には以下が含まれます。
BEGIN { FS="\t" }
{ sum[FILENAME] += $2 }
END {
for (i=1;i<ARGC;i++)
printf "%s %15d\n", ARGV[i], sum[ARGV[i]] >> "output.txt"
}
しかし、あなたは ">>" を誤用していて、本当に ">" を使いたいと思っています。> "output.txt"
入力ファイルと出力ファイルの両方を同じ場所に表示できるように、awk スクリプトを完全に削除して、コマンド ラインで出力をリダイレクトすることもできます。
意味がわかりませんhow can one pass the output of printf ("""%%15d""",sum) to a variable?
。
sprintf()
印刷物のような書式設定を使用し、結果を の代わりに使用する変数に割り当てるには、次のようにしますprintf
。
$ awk 'BEGIN{ foo = sprintf("%s",3.79); print foo}'
3.79
$ awk 'BEGIN{ foo = sprintf("%d",3.79); print foo}'
3
$ awk 'BEGIN{ foo = sprintf("%.4f",3.79); print foo}'
3.7900