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왜냐하면 귀하의 코드는 도트 파일을 고려하고 내 코드는 그렇지 않기 때문입니다. 해당되는 경우 수정될 수 있습니다.

존재하다귀하의 의견각 파일에 대해 두 가지 작업을 수행한다고 언급하셨습니다. 내가 올바르게 이해했다면 이 경우 다음과 같이 코드를 수정할 수 있습니다.

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

관련 정보