xargsを使用して値を渡して動的出力ファイル名を生成する

xargsを使用して値を渡して動的出力ファイル名を生成する

私のフォルダにいくつかのファイルがあります。次のコマンドを実行すると、フィルタリングされたファイル名(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

おすすめ記事