我有一个这样的文本文件:
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]"
发布于 2016-01-30 23:39:00
当应该用$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
https://stackoverflow.com/questions/35111284
复制