テキストファイルにコマンドを作成し、それをファイルとして端末にロードできますか?それでは、ファイルをロードするコマンドは何ですか?ありがとうございます。
たとえば、ファイルコマンドは次のようになります。
awk -f program.awk d01.active > out1
awk -f program.awk d02.active > out2
これは、コマンドを使用できないawkプログラムを実行するのに問題があるためです。
awk -f program.awk d??.active > out
大量のファイルにprogram.awkを使用する必要がありますが、そのコマンドでプログラムを変更できない場合、これは私にとってより簡単な解決策のようです。
答え1
シェルコマンドのリスト(1行に1つ)を含むファイルがある場合は、シェルスクリプトがあります。あなたがしなければならないことはそれを実行することだけです:
sh file_commands
しかし、これは私が必要と思う最も簡単な方法ではありません。現在のディレクトリ内のすべてのファイルを実行するには、program.awk
単にループを使用するだけです。d??.active
for file in d??.active; do awk -f program.awk "$file" > "$file".out; done
これによりd01.active.out
、出力ファイルが生成され、ファイルがd01.active
生成されます。d02.active.out
d02.active
答え2
シェルスクリプトは、本質的に指定された(またはデフォルトの)インタプリタによってコマンドリストとして解釈される行区切り文字で終わるコマンドのリストです。
通訳者を指定するには、ファイルを次に終了する必要があります。ハッシュボーン(シェバンとも呼ばれる)。
例:
#!/bin/sh
#!/bin/bash
#!/bin/ksh
#!/bin/zsh
#!/usr/bin/env bash
注:各インタプリタには独自の構文とルールセットがあります。どの製品を使用しようとしても、マニュアルをよく読んでください。
ハッシュバンの後、デフォルトでその行で実行するコマンドのリストを開始できます。
注:このコマンドは上から下に順番に実行されます。
あなたの例では、次のようなものが欲しいでしょう。
#!/bin/sh
awk -f program.awk d01.active > out1
awk -f program.awk d02.active > out2
その後、ファイルを実行可能にし、コマンドラインでファイルへのフルパスまたは相対パスを指定して実行する必要があります。 (または実行してsh /path/to/file
)
ただし、これは潜在的なxy問題のように見え、よりプログラム的な方法で処理できます。
たとえば、
#!/bin/bash
for file in d??.active; do
n=${file:1:2}
awk -f program.awk "$file" > "out$n"
done