bash脚本加入非法使用

时间:2014-04-22 14:49:50

标签: bash

tab="`echo | perl -pe 's//\t/'`"
if [ -e port ]
then
    cat port | sort -n >! port_s.sorted
    cat port_s | sort -n >! port_sw.sorted

    join -v 1 port_sw.sorted  port_s.sorted
    join -v 1 port_sw.sorted  port_ssorted >! "${new}
    join -t "$tab" port_swaps_new_durs.sorted port_swaps_old_durs.sorted >! audit_port_swaps.tmp
    awk -F"$tab" '{if [ ($2 != "NaN") && ($2 != 0) && ((abs($2 - $3)/$2) > 0.05) ] print}' \
      audit_port_swaps.tmp >! audit_port_swaps.tmp2
    count=`cat audit_port_swaps.tmp2 | wc -l`

以上是bash脚本的一部分,我在连接命令的使用错误和awn第1行附近的语法错误。

任何帮助将不胜感激。

error-
usage: join [-a file_number | -v file_number] [-o list [-e string]]
            [-t char] [-1 field] [-2 field] file1 file2

       join [-a file_number] [-j field] [-j1 field] [-j2 field]
            [-o list [-e string]] [-t char] file1 file2
usage: join [-a file_number | -v file_number] [-o list [-e string]]
            [-t char] [-1 field] [-2 field] file1 file2

       join [-a file_number] [-j field] [-j1 field] [-j2 field]
            [-o list [-e string]] [-t char] file1 file2
awk: syntax error near line 1
awk: illegal statement near line 1

1 个答案:

答案 0 :(得分:2)

  1. 你错过了一个收尾报价,但是从错误中我怀疑这是一个复制粘贴问题

    join -v 1 port_sw.sorted  port_ssorted >! "${new}
    
  2. 您的$tab有一个您不想要的换行符。我怀疑这是真正的原因。这是获取标签的一种创造性方式,但却是错综复杂的,最终是错误的。

    tab="`echo | perl -pe 's//\t/'`"
    

    使用$'\t'代替

    awk -F $'\t' '{if [ ($2...
    

    或者,因为它是awk,它正确地解释了转义,只是'\t'

    awk -F'\t' '{if [ ($2...
    
  3. awk不使用shell [语法,就命令结构而言,它是一种标准的c语言。顺便说一句,这意味着你不需要像在shell中那样需要空格。

    awk -F '\t' '{if(($2 != "NaN") && ...
    
  4. 从技术上讲,本身并不是错误,但您应该使用$(...)代替`...`

    count=$(cat audit... | wc -l)
    
  5. 大多数命令行实用程序(包括wc)允许您在命令行上指定文件名。但是,如果您这样做,wc也会打印文件名;您可以使用awk来获取计数(优点:条带空白),或者只使用shell重定向。与文件前面的sort相同。

    count=$(wc -l auditfile.txt | awk '{print $2}')
    count=$(awk 'END{print $NR}' auditfile.txt)
    count=$(wc -l < auditfile.txt)
    
  6. 您应该使用tee,而不是重复相同的行(并且可能在一个中输入拼写错误,就像您在这里一样)。

    join -v 1 port_sw.sorted  port_s.sorted | tee "$new"