我有一个包含内容的文件:
$> cat file
1
2
4
现在,我想使用/运行另一个脚本,如果数字之间的差异(减法)大于1,否则退出主脚本。
我尝试以下列方式执行此操作,但不起作用:
less file \
| awk '\
function abs(x){return (((x < 0.0) ? -x : x) + 0.0)}\
BEGIN{i=1;}\
{new=old;old=$1}\
{if(abs($1-new)>1)i++;}
END{if(i>1) print 1; else print 0;}' \
| while read i;do
if (( ${i} ));then
echo -n "Would you like to continue? [yes or no]: "
read yno
case ${yno} in
y )
echo Continuing...
;;
n )
echo Exiting...
;;
* )
echo "Invalid input"
;;
esac
else echo Cont...
fi
done
我希望,如果$ {i} == 1,那么我可以做出决定,无论我是否愿意继续。
答案 0 :(得分:1)
我希望,如果$ {i} == 1,
是的,但是如果$ {i} =“输入错误”或其他一些值,您的语句需要明确说明您的情况。使用less来将文件发送到管道也不是标准情况,为什么不直接将文件名传递给awk进行处理,即
awk '\
function abs(x){return (((x < 0.0) ? -x : x) + 0.0)}\
BEGIN{i=1;}\
{new=old;old=$1}\
{if(abs($1-new)>1)i++;}
END{if(i>1) print 1; else print 0;}' file1 \
| while read i;do
if (( "${i}" == 1 ));then
echo -n "Would you like to continue? [yes or no]: "
read yno
. . .
我希望这会有所帮助
答案 1 :(得分:0)
问题是唯一的输入是来自awk脚本完全消耗的less。控制台不可用。
这样的事情会有用吗
i=$(awk 'function abs(x){return (((x < 0.0) ? -x : x) + 0.0)}BEGIN{i=1;}{new=old;old=$1}{if(abs($1-new)>1)i++;}END{if(i>1) print 1; else print 0;}' file)
if (( ${i} ));then
echo -n "Would you like to continue? [yes or no]: "
read yno
case ${yno} in
y )
echo Continuing...
;;
n )
echo Exiting...
;;
* )
echo "Invalid input"
;;
esac
else echo Cont...
fi