나는 UNIX 쉘의 맵 기능으로 xargs
을 생각해 보았다. filter
기능이란 무엇입니까?xargs가 map이면 필터 란 무엇입니까?
편집 : 좀 더 명확해야 할 것처럼 보입니다.
단일 문자열을 매개 변수로 사용하고 종료 코드 0 또는 1을 반환하는 프로그램을 제출해야한다고 가정 해 봅시다.이 프로그램은 허용되는 문자열에 대한 조건 자로 작동합니다.
예를 들어 문자열 매개 변수를 파일 경로로 해석하고 "이 파일이 존재합니까?"라는 조건을 정의 할 수 있습니다. 이 경우, 프로그램은 test -f
일 수 있으며, 주어진 문자열의 경우 파일이 존재하면 0으로 종료하고 그렇지 않으면 1로 종료합니다.
또한 문자열을 전달해야합니다. , 예를 들어, 내 파일 시스템에 존재 만 경로를 포함
/etc/apache2/apache2.conf
/foo/bar/baz
/etc/hosts
지금, 나는 새로운 파일, ~/existing_paths
을 만들 포함하는 파일 ~/paths
이있을 수 있습니다. 내 경우에는, 그게 내가의 ~/paths
파일에 읽기 술어 test -f
에 의해 그 라인을 필터링하고, ~/existing_paths
출력을 작성하여이 작업을 수행 할 수
/etc/apache2/apache2.conf
/etc/hosts
될 것이다.
xfilter COMMAND [ARG]...
어느, 표준 입력의 각 행 L
에 대한 COMMAND [ARG]... L
를 호출합니다 : 그것은 내가 찾고 있어요 가설 프로그램 xfilter
입니다
cat ~/paths | xfilter test -f > ~/existing_paths
: 같은 xargs
유추으로이 보일 것이다 종료 코드가 0이면 L
을 인쇄하고 그렇지 않으면 아무 것도 인쇄하지 않습니다.
- 존재에 의해 filepaths의 목록을 필터링 할 수있는 방법을 :
명확하게하기 위해, 내가 찾고 있지 않다. 그것은 구체적인 예입니다.
- 어떻게 이러한 프로그램을 작성하십시오. 나는 그걸 할 수있어.
I 오전 :
- 기존의 구현,
xargs
같은, 또는 - 이 존재하지 않는 이유에 대한 명확한 설명
효과가 없으므로 ** fork ** Nt exit-status를 기반으로하는 파일 만 출력합니다. 앞서 말했듯이, 어떤 언어 (bash, perl, C)로도 작성하는 것이 간단하지만 효과적이지는 않습니다. 훨씬 더 효과적인 것은 몇 가지 명령 (상황에 따라 적절한 도구)을 직접 사용하여 _STDIN_을 읽을 수 있고 zilion 시간으로 입력 _을 필터링 할 수 있습니다. ** fork/exec ** exit-status 명령. 여러 번 'xargs'도 가장 효과적인 방법이 아닙니다. (파일 목록이 길어지면 1_000_000 줄을 상상해보십시오. 밀리언 포크는 할 수있는 최선의 방법이 아닙니다 ...) 그리고 필요한 경우 (알고있는 것처럼) 3 행 배시 기능입니다. – jm666
@ jm666은 " "당신은"공연자 "를 의미합니다. 나는 공연에 관심이 없으며, 표현력에 관심이 있습니다. – jameshfisher