GNU 병렬 처리의 --skip-first-line을 --pipepart와 함께 사용할 수 없습니까?

GNU 병렬 처리의 --skip-first-line을 --pipepart와 함께 사용할 수 없습니까?

다음과 같은 파일이 있다고 가정해 보겠습니다.

COLUMN
1
2
3
4

GNU를 사용하여 병렬로 실행하고 처리하고 싶지만 첫 번째 줄(헤더라고도 함)을 건너뛰려면 다음을 시도했습니다.

parallel -a test.txt -k --pipepart --will-cite --skip-first-line cat

그러나 --skip-first-line은 예상대로 작동하지 않습니다.

parallel -a test.txt -k --pipepart --will-cite --skip-first-line cat
COLUMN
1
2
3
4

내가 기대하는 것은 이것이다:

1
2
3
4

파이프라인부분을 병렬로 사용하여 첫 번째 줄을 건너뛸 수 있습니까?

답변1

이 버그는 Git에서 수정되었습니다.

https://git.savannah.gnu.org/cgit/parallel.git/snapshot/parallel-master.tar.gz

parallel -a test.txt -k --pipepart --skip-first-line cat

답변2

대체 문자열 {#}(일명 일련 번호)을 사용하여 솔루션을 찾았습니다. 첫 번째 헤더는 항상 시퀀스 1에 있으므로 구문 분석할 때 특별히 처리할 수 있습니다. 예를 들어 스크립트를 사용하면 다음과 같습니다.

#!/bin/bash

_test()
{
    if [[ "$1" == 1 ]]; then
        :
    else
        cat
    fi
}

export -f _test

parallel -a demo.txt -k --pipepart --will-cite _test {#}

이 스크립트를 실행하면 예상되는 결과가 생성됩니다.

1
2
3
4

관련 정보