2017-12-24 30 views
0

을 지정합니다 :사용 정규식 내가 일부 열을 필요로 많은 파일과 폴더가 출력 파일 이름

mkdir ./raw_data/selection 

doit() { 
    csvfix read_dsv -f 1,3,7 -s \; $1 > $1 | sed 's/raw_data/raw_data\/selection/' 
} 
export -f doit 
Files_To_Parse=`ls ./raw_data/*csv` 
parallel doit ::: $Files_To_Parse 

이 작동하지 않습니다.

하지만 경우 이에 :

cd ./raw_data 
doit() { 
    csvfix read_dsv -f 1,3,7 -s \; $1 > selection/$1 
} 
export -f doit 
Files_To_Parse=`ls -1 *csv` 
parallel doit ::: $Files_To_Parse 

그것은 작동하지만 나는이 프로젝트에 상위 폴더에서이 작업을 실행할 수 있도록하고 싶습니다 (즉 brief_csv.sh 및 호출라는 이름의 파일이 넣어

+0

것은 오타는 "이을하지 않아도인가요 -1 "옵션을 사용할 수 있습니까? 나는 그것이 필요할 것이라고 기대할 것이다. 당신에게 주요한 문제가 있다면, 이것이 Bash라면 "$ 1> ./raw_data/selection/${1:9}"시도해 보셨습니까? " 그렇지 않으면 아마도 "$ 1> $ (echo $ 1 | sed의/raw_data/raw_data \/selection/')"? – EdmCoff

+0

'ls'은 파이프에 쓰는 것을 알고 자동으로'-1' 행동을 가능하게합니다. 이 옵션은 인터 액티브 세션에서 출력이 어떻게 보이는지보고 싶을 때만 필요합니다. – tripleee

+0

어쨌든, 스크립트에서'ls '를 사용하지 마십시오. http://mywiki.wooledge.org/ParsingLs 올바른 방법은 간단히'parallel doit ::: * csv'입니다. – tripleee

답변

1

, 당신은 할 수

$ cut -d \; -f 1,3,7 $f ... 
1

)의 IDE에서 내가 사용하는 명령 만이 줄을 모른다 :

csvfix read_dsv -f 1,3,7 -s \; $ 1> $ 1 | sed ...

당신이 읽고있는 파일의 출력을 리디렉션합니다. 이것은 작동하지 않습니다. 사실 수정 된 코드가 대신 작동한다고합니다. 임시 파일을 사용하여 중간 결과를 저장할 수도 있고, 그 중 많은 것을 사용하는 것을 두려워하지 않아도됩니다. 디버깅이 더 쉬워지고 (중간 경로를 볼 수 있음) 시스템에 문제가 발생하지 않습니다./tmp는 중간 파일을 넣는 좋은 장소입니다.

첫 번째 단계는 csvfix를 사용하고/tmp/my-csvfix-intermediate에서 리디렉션하십시오. 그런 다음 sed를 사용하여/tmp/my-csvfix-intermediate를 읽고/tmp/my-grep-intermediate에 기록하십시오. 마지막으로 통과 한 후 마지막 중간 결과를 가져와 원래 파일을 덮어 쓴 다음 백업 한 것일 수 있습니다. 필요한 곳 ​​어디에서나 파일을 이동할 수 있습니다. IDE에서 스크립트를 실행하는 데 아무런 문제가 없습니다. 필요한만큼의 구절을 사용하십시오.

디버깅 할 때 병렬 처리하지 마십시오. 스크립트가 작동하면 병렬 처리를 추가 할 수 있습니다.

두 개 이상의 병렬 프로세스가 동일한 파일 (/tmp/my-...-intermediate)에 쓰려고하면 하나 더 문제가 발생합니다. 이를 극복하기 위해 모든 프로세스마다 다른 파일을 사용해야합니다. bash 변수 "$$"는 "/ tmp/my - $$ - blablabla"와 같은 파일 이름을 사용하고, $$는 프로세스의 PID로 대체되며, 병렬 프로세스는 동일한 PID를 가질 수 없습니다 .

희망, 도움이 되겠습니다. 당신이 cut을 사용할 수

for f in raw_data/*.csv 
do 
    csvfix ... "$f" > raw_data/selection/"${f##*/}" 
done 
또한

, 대신 csvfix을 열을 추출 : 당신이 배쉬를 사용하는 경우