명령줄에서 다음 명령을 실행했는데 제대로 작동하지만 셸 스크립트에서 실행하고 터미널에서 셸 스크립트를 실행하려고 하면 다음 오류가 발생합니다.
join -t $'\t' -a1 -e "u" -1 1 -2 1 -o 1.1,2.1,2.2 file1 \ <(cat file2 | sort -k1,1|tr [:blank:] \\t ) | awk 'BEGIN {FS="\t";OFS="\t"}{if \($2 == "u")print $0, $1;else print $0, $3}' | awk '{gsub(/ /,"\t");l=$4; sub(/.*_/,"",l); print $2"\t"$3"\t"l}' > out
syntax error near unexpected token
(''
대괄호를 이스케이프 처리하려고 시도했지만 여전히 동일한 오류가 발생합니다. 내 스크립트에 이러한 다층 명령이 많아서 이로 인해 다른 부분에서 문제가 발생할 것이라고 확신합니다. 이 문제를 해결할 수 있는 방법이 있습니까?
답변1
당신이 잃는 것은 )
당신의 추종자 입니다표준 입력하위 조항. 코드를 읽으려고 하면 머리가 아플 것 같습니다.
이것을 시도해 보세요. (더) 읽기 쉽기 때문에 추가 최적화에 도움이 됩니다.
tr '[:blank:]' $'\t' <file2 |
awk '
BEGIN { FS="\t"; OFS="\t" }
{ if ($2 == "u") print $0, $1; else print $0, $3 }
' |
awk '
{ gsub(/ /,"\t"); l=$4; sub(/.*_/,"",l); print $2 "\t" $3 "\t" l }
' |
sort |
join -t $'\t' -a1 -e "u" -1 1 -2 1 -o 1.1,2.1,2.2 file1 - >out