ファイルからコマンドをロードする

ファイルからコマンドをロードする

テキストファイルにコマンドを作成し、それをファイルとして端末にロードできますか?それでは、ファイルをロードするコマンドは何ですか?ありがとうございます。

たとえば、ファイルコマンドは次のようになります。

awk -f program.awk d01.active > out1
awk -f program.awk d02.active > out2

これは、コマンドを使用できないawkプログラムを実行するのに問題があるためです。

awk -f program.awk d??.active > out

大量のファイルにprogram.awkを使用する必要がありますが、そのコマンドでプログラムを変更できない場合、これは私にとってより簡単な解決策のようです。

この質問に関するhttps://stackoverflow.com/questions/55313187/more-input-files-in-awk?noredirect=1#comment97356807_55313187

答え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.outd02.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

関連情報