单独的特殊行文本文件

时间:2016-01-31 07:07:04

标签: bash syntax-error

我有一个这样的文本文件:

   a 20 100  
   b 10 150
   c 30 400

我想分隔第2列的值等于或小于20且第3列的值等于或大于100的行。我试过这段代码:

s_t1=20
e_t1=100
s_t=(`awk '{printf "%15.10g", $2}' a.txt`)
e_t=(`awk '{printf "%15.10g", $3}' a.txt`)
numb=`more a.txt|wc|awk '{print $1}'`;
iii=0
while [[ $iii -lt $numb ]]; do
  if [[ $s_t[$iii] -le $s_t1 ]]  && [[ $e_t[$iii] -ge $e_t1 ]]; then
    awk -v l=$iii 'FNR==l' a.txt >> out.txt
  fi
  iii=$(($iii+1))
done

但我有这个错误:

 syntax error: invalid arithmetic operator (error token is "[0]"

1 个答案:

答案 0 :(得分:2)

当使用$s_t[$iii]访问数组元素时,尝试使用${s_t[$iii]}访问数组元素。 ${s_t[iii]}实际上也可以正常工作,因为下标被视为算术表达式。

修复后,你的脚本中还有另一个错误:数组索引从零开始,但是awk记录号从1开始,所以当你在数组索引0处找到匹配的行时,你会尝试在awk中打​​印第0行,但这并不存在,所以你的程序只返回第一行而不是前两行。

要修复 ,你的行

awk -v l=$iii 'FNR==l' a.txt >> out.txt

必须替换为

awk -v l=$(( iii + 1 )) 'FNR==l' a.txt >> out.txt

你的程序做的是方式,太复杂了。

你可以做你想做的事
awk '$2<=20 && $3>=100 { print }' a.txt