请帮我找问题
t1=$(sort -k 2,2 f.txt|head -1|cut -d" " -f3)
while read x
do
t2=$(echo $x|cut -d" " -f2)
if [ $t2 -ge $t1 ] ; then
p=$(echo $x|cut -d" " -f1)
echo -n $p " "
fi
done <f.txt
f.txt
F1 13
G 13
H 0
我正在跟踪错误
-sbash: [: 13: unary operator expected
-sbash: [: 13: unary operator expected
没有H 0行,它的工作正确
答案 0 :(得分:1)
'一元运算符预期'是错误。
这意味着t2或t1为空。要使空变量不会消失,请使用默认表示法${VARIABLE:-DEFAULT}
为它们提供默认值:
if [ ${t2:-0} -ge ${t1:-0} ]; then
答案 1 :(得分:1)
你正在使用bash,所以使用bash的内部。使用[]
时,无需调用外部剪切等也引用变量set -- $(sort -k 2,2 f.txt|head -1)
t1=$3
while read f1 f2 f3
do
t2="$f2"
if [ "$t2" -ge "$t1" ] ; then
p=$f1
echo -n $p " "
fi
done <f.txt
答案 2 :(得分:0)
我想你想要
t1=$(sort -k 2,2 f.txt|head -1|cut -d" " -f2)
而不是
t1=$(sort -k 2,2 f.txt|head -1|cut -d" " -f3)
您的f.txt
只有两个字段,因此cut
命令无效,然后您将其传递给[ ]
。
关于没有H 0
行的原因,我怀疑您的F
行是
F 1 13
而不是
F1 13
(这只是猜测。)