私のフォルダにいくつかのファイルがあります。次のコマンドを実行すると、フィルタリングされたファイル名(test1、test2、test3)を含むリストを生成し、xargsを使用してgrep filterコマンドに渡すことができます。フィルターコマンドのファイルには、フィルタリングするいくつかの値が含まれています。
ls -Art1 | grep test | xargs -L1 grep -vf filter > ouput
ただし、このコマンドが実行されると、出力ファイルにはtest1、test2、およびtest3に対してフィルタ処理された結果が含まれます。一体。
各test1> test1_output、test2> test2_output、...ごとに別々のファイルがありたいです。したがって、xargs 値を取り、追加の文字列 "_output" を追加して出力ファイル名を生成します。
答え1
名前の一致を検索するために出力をパイプする必要はありませんls
。ただシェルグローブを使用してください。これにより、各フィルタ試行の出力ファイルを定義することもできます。
for file in *test*
do
[ -f "./$file" ] && grep -vf filter "./$file" >"${file}_output"
done
技術的には、これはあなたのコードとは少し異なるファイルセットかもしれません。ls -A
なぜなら、あなたのコードはドットファイルを考慮し、私のコードはそうではないからです。該当する場合は修正することができます。
存在するあなたのコメント各ファイルに対して2つのことを行うと述べました。私が正しく理解したら、この場合は次のようにコードを修正できます。
for file in *test*
do
if [ -f "./$file" ]
then
grep -f filter "./$file" >"${file}_delta"
grep -vf filter "./$file" >"${file}_output"
fi
done