使用 xargs 传递值以生成动态输出文件名

使用 xargs 传递值以生成动态输出文件名

我的文件夹中有一些文件。通过运行以下命令,我可以创建一个包含已过滤文件名(test1、test2、test3)的列表,并使用 xargs 将其传递给 grep 过滤命令筛选命令中的文件包含一些要过滤掉的值。

ls -Art1 | grep test | xargs -L1 grep -vf filter > ouput

但是,当运行此命令时,输出文件包含 test1、test2 和 test3 的过滤结果。一体。

我想为每个 test1 > test1_output、test2 > test2_output,...都有单独的文件,因此采用 xargs 值,只需向其中添加一个额外的字符串“_output”即可生成输出文件名

答案1

无需通过管道输出来ls搜索名称匹配。只需使用 shell glob 即可。这还允许您为每个过滤器尝试定义一个输出文件

for file in *test*
do
    [ -f "./$file" ] && grep -vf filter "./$file" >"${file}_output"
done

从技术上讲,这可能是一组与您的文件匹配略有不同的文件,ls -A因为您的代码考虑点文件,而我的代码则不考虑。如果相关的话可以修复。

你的评论您提到您正在对每个文件执行两项操作。如果我理解正确的话,那么对于这种情况你可以修改代码如下:

for file in *test*
do
    if [ -f "./$file" ]
    then
        grep -f filter "./$file" >"${file}_delta"
        grep -vf filter "./$file" >"${file}_output"
    fi
done

相关内容