2013-10-17 2 views
1

tsv가 3 또는 4 열이고 각 열은 쉘 스크립트의 인수입니다.
는 그래서 난 4 열은 항상 존재하지 않는 TSVtsv에서 gnu 병렬 입력

~ parallel --colsep "\t" thescript.py --arg1 {1} --arg2 {2} --arg3 {3} --arg4 {4} :::: input.tsv

에서 값을 쉘 스크립트를 실행 GNU 병렬를 사용하려면, 그래서 경우에만 --arg4 {4}을 추가 할 수있는 현명한 방법이 있는지 궁금 해서요 {4}가 존재합니다.
python은 optparser.Optionparser를 사용하므로 스크립트 수정을 피하는 것이 좋습니다.

답변

0

GNU 병렬 패스 {4} 문자열 열 4.

에 대한 값이없는 경우 '{4}'당신이 경우에 thescript.py을 포장 수 등 :

parallel --colsep "\t" 'if [ "{4}" = "\{4\}" ]; then thescript.py --arg1 {1} --arg2 {2} --arg3 {3}; else thescript.py --arg1 {1} --arg2 {2} --arg3 {3} --arg4 {4}; fi' :::: input.tsv 

또는 당신이 선호하는 경우 가독성은 Bash 함수를 사용합니다 :

my_func() { 
    if [ "$4" = "\{4\}" ]; then 
     thescript.py --arg1 $1 --arg2 $2 --arg3 $3 
    else 
     thescript.py --arg1 $1 --arg2 $2 --arg3 $3 --arg4 $4 
    fi 
} 
export -f my_func 
parallel --colsep "\t" my_func {1} {2} {3} {4} :::: input.tsv 
관련 문제