2017-03-16 1 views
1

bash에 두 개의 컷을 붙여 넣으려고하는데 루프를 실행할 때 Syntax error: "(" unexpected 오류가 발생합니다. 그러나 동일한 코드가 단일 파일에서 작동합니다. 아무도 도와주세요. bash 코드를 실행하는 중 오류가 발생했습니다.

paste -d, <(cut -d, -f -2 IE3BW0047A_03012017000949.csv) <(rev IE3BW0047A_03012017000949.csv | cut -d, -f -7 | rev) 

작동 되나 루프에서 실행

를 작동하지
for filename in *.csv; do 
    paste -d , < (cut -d, -f -2 "$filename") < (rev "$filename" | cut -d, -f -7 | rev) > ${tgt_wd}/"$filename" 
done 
+0

https://www.shellcheck.net – jm666

+1

, POSIX 쉘은 공정 대체를 인식하지 못합니다. '/ bin/sh '조차'bash'에 대한 링크이고, POSIX 호환성을 유지하기 위해'<(...)'를 잘못된 입력 방향 전환으로 구문 분석합니다. – chepner

답변

3

공정 대체에 <( 사이에는 공백이 없어야합니다 :

for filename in *.csv; do 
    paste -d , <(cut -d, -f -2 "$filename") <(rev "$filename" | cut -d, -f -7 | rev) > ${tgt_wd}/"$filename" 
done 
+0

오류가 여전히 존재합니다. –

+0

두 곳에서 해결 했습니까? – user000001

+0

더 이상의 아이디어가 있습니까? –

1

내가 만든 그것을 tmp 파일에 넣으면 효과가있었습니다. 당신은`sh`을 사용하고 있던 바와 같이

#!/bin/bash 

for filename in *.csv; do 
    cut -d, -f -2 "$filename" > 1_"$filename" 
    rev "$filename" | cut -d, -f -7 | rev > 2_"$filename" 
    paste -d, 1_"$filename" 2_"$filename" > "$tgt_dir"/"$filename" 
    rm 1_"$filename" 2_"$filename" 
done 
관련 문제