ファイルからコンテンツを収集してコマンドに入力するシェルを作成する方法は? $ コマンド < 入力ファイル 開始方法がわかりません。
4 に答える
wc
例として使用:
$ wc < input_file > output_file
説明:
wc
: これは、呼び出しているコマンド (またはシェル組み込み) です。< input_file
: 入力を読み取るinput_file
> output_file': write output into
出力ファイル`
多くのコマンドは、入力ファイル名をコマンドライン引数の 1 つとして (を使用せずに<
) 受け入れることに注意してください。次に例を示します。
grep pattern file_name
awk '{print}' file_name
sed 's/hi/bye/g
ファイル名`
シェル プログラムの入力ファイル記述子を入力ファイルにポイントする必要があります。c では、int dup2(int oldfd, int newfd);
newfd を oldfd のコピーにするジョブを呼び出し、必要に応じて最初に newfd を閉じることによって実現されます。
Unix/Linux では、すべてのプロセスに独自のファイル記述子があり、次のように保存されます。
0 - 標準入力 (stdin) 1 - 標準出力 (stdout) 2 - 標準エラー (stderr)
そのため、使用する入力ファイルを stdin 記述子で指定する必要があります。これが私が今月前に書いた方法です:
void ioredirection(int type,char *addr) {
// output append redirection using ">>"
if (type == 2) {
re_file = open(addr, O_APPEND | O_RDWR, S_IREAD | S_IWRITE);
type--;
}
// output redirection using ">"
else if (type==1) re_file = open(addr, O_TRUNC | O_RDWR, S_IREAD | S_IWRITE);
// input redirection using "<" or "<<"
else re_file = open(addr, O_CREAT | O_RDWR, S_IREAD | S_IWRITE);
old_stdio = dup(type);
dup2(re_file, type);
close(re_file);
}
そのために使用できますxargs
:
たとえば、ファイル名のリストを持つファイルがあるとします。
cat your_file|xargs wc -l
wc -l
コマンド
でcat
ありxargs
、ファイル内の各行を入力として渡しますwc -l
したがって、出力は、名前がinputfileに存在するすべてのファイルの行数になります。ここでの主なことはxargs
、すべての行を入力として渡すことですwc -l
次のコマンドを使用して、bash スクリプトの入力から読み取ることができますread
。
inputreader.sh
#!/bin/bash
while read line; do
echo "$line"
done
出力
$ echo "Test" | bash ./inputreader.sh
Test
$ echo "Line 1" >> ./file; echo "Line 2" >> ./file
$ cat ./file | bash ./inputreader.sh
Line 1
Line 2
$ bash ./inputreader.sh < ./file
Line 1
Line 2