我正在尝试将shell变量中的字符串作为输入并使用awk打印第二个单词
我不确定为什么这不起作用
ITEM="ABC DEF"
awk -v var=$ITEM -F ' ' '{ print $2 }'
结果应为DEF
答案 0 :(得分:2)
if(len(conts)==3):
if(pinchFlag==1):
pinchFlag=0
mouse.release(Button.left)
mouse.release(Button.left)
x1,y1,w1,h1 = cv2.boundingRect(conts[0])
x2,y2,w2,h2 = cv2.boundingRect(conts[1])
x3,y3,w3,h3 = cv2.boundingRect(conts[2])
cv2.rectangle(frame,(x1,y1),(x1+w1,y1+h1),(255,0,0),2)
cv2.rectangle(frame,(x2,y2),(x2+w2,y2+h2),(255,0,0),2)
cv2.rectangle(frame,(x3,y3),(x3+w3,y3+h3),(255,0,0),2)
cx1 = x1+w1/2
cy1 = y1+h1/2
cx2 = x2+w2/2
cy2 = y2+h2/2
cx3 = x3+w3/2
cy3 = y3+h3/2
#cx = (cx1+cx2)/2
#cy = (cy1+cy2)/2
#cz = (cx3+cx1)/2
cv2.line(frame, (cx1,cy1),(cx2,cy2),(cx3,cy3),(255,0,0),2)
$ item="ABC DEF"
$ awk '{print $2}' <<< "$item"
DEF
是输入行的第二个字段。但没有任何意见。使用$2
重定向<<<
标准输入上的变量$item
。
使用awk
时可能更容易理解:
echo
答案 1 :(得分:2)
$ ITEM="ABC DEF"
$ awk -v var="$ITEM" 'BEGIN{ split(var,a); print a[2] }'
DEF
但也要考虑:
$ a=( $ITEM )
$ echo "${a[1]}"
DEF
和
$ set -- $ITEM
$ echo "$2"
DEF
根据ITEM中的值,最后2个可能需要为globbing等进行清理。
答案 2 :(得分:1)
我相信这个任务可以通过参数扩展来完成,如下所示。
echo "${ITEM#* }"
DEF
当然,如果您有任何进一步的要求,那么其他程序也可以在这里考虑。
答案 3 :(得分:1)
正如PesaThe
所解释的那样,您可以使用
$ echo "$item" | awk '{print $2}'
DEF
但我觉得使用awk打印变量的一部分是矫枉过正。
您可以寻求更简单的解决方案,例如cut
命令:
$ echo "$item" | cut -d' ' -f2
DEF
您使用-d' '
将分隔符定义为空格,然后使用-f2