コマンドラインで次のコマンドを実行しましたが、正常に動作しますが、シェルスクリプトで実行して端末でシェルスクリプトを実行しようとすると、次のエラーが発生します。
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