我有一个这样的文本文件:
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]"
答案 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