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
答案 0 :(得分:2)
你错过了一个收尾报价,但是从错误中我怀疑这是一个复制粘贴问题
join -v 1 port_sw.sorted port_ssorted >! "${new}
您的$tab
有一个您不想要的换行符。我怀疑这是真正的原因。这是获取标签的一种创造性方式,但却是错综复杂的,最终是错误的。
tab="`echo | perl -pe 's//\t/'`"
使用$'\t'
代替
awk -F $'\t' '{if [ ($2...
或者,因为它是awk,它正确地解释了转义,只是'\t'
。
awk -F'\t' '{if [ ($2...
awk不使用shell [
语法,就命令结构而言,它是一种标准的c语言。顺便说一句,这意味着你不需要像在shell中那样需要空格。
awk -F '\t' '{if(($2 != "NaN") && ...
从技术上讲,本身并不是错误,但您应该使用$(...)
代替`...`
。
count=$(cat audit... | wc -l)
大多数命令行实用程序(包括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)
您应该使用tee
,而不是重复相同的行(并且可能在一个中输入拼写错误,就像您在这里一样)。
join -v 1 port_sw.sorted port_s.sorted | tee "$new"