我已经在命令行上运行了以下命令,它工作正常,但是当我尝试从 shell 脚本运行它并从终端运行 shell 脚本时,出现以下错误:
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