我是awk和shell脚本的新手。 当我执行此命令时:
~$ sudo cat /dev/ttyUSB0
打印:
SOFTPAY:F:isoutl.c|L:01301|(
SOFTPAY:F:isoutl.c|L:01307|600020000008002018010000800000920000121947070700203231313030323832
SOFTPAY:F:isoutl.c|L:01311|)
SOFTPAY:F:isoutl.c|L:01301|(
SOFTPAY:F:isoutl.c|L:01307|600020000008002018010000800000920000121947070700203231313030323832
SOFTPAY:F:isoutl.c|L:01311|)
SOFTPAY:F:isoutl.c|L:01311|)
SOFTPAY:F:isoutl.c|L:01307|600000002008102018010002800004920000122009070700203030323131303032383200340032307C6458EE3A4EF4C37D5BEBD6D609A1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
SOFTPAY:F:isoutl.c|L:01311|)
SOFTPAY:F:isoutl.c|L:01301|(
SOFTPAY:F:isoutl.c|L:01307|600000002008102018010002800004920000122009070700203030323131303032383200340032307C6458EE3A4EF4C37D5BEBD6D609A1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
SOFTPAY:F:isoutl.c|L:01311|)
执行时:
~$ sudo cat /dev/ttyUSB0 | grep --line-buffered "SOFTPAY:F:isoutl.c|L:01307|"
打印:
SOFTPAY:F:isoutl.c|L:01307|600020000008002018010000800000920000121546070700203231313030323832
SOFTPAY:F:isoutl.c|L:01307|600020000008002018010000800000920000121546070700203231313030323832
SOFTPAY:F:isoutl.c|L:01307|600000002008102018010002800004920000121603070700203030323131303032383200340032AE66FF30893AD0E4ABF1E6F6C17F229AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
SOFTPAY:F:isoutl.c|L:01307|600000002008102018010002800004920000121603070700203030323131303032383200340032AE66FF30893AD0E4ABF1E6F6C17F229AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
当我输入:
~$ sudo cat /dev/ttyUSB0 | grep --line-buffered "SOFTPAY:F:isoutl.c|L:01307|" | uniq
打印出来:
SOFTPAY:F:isoutl.c|L:01307|600020000008002018010000800000920000104334070700203231313030323832
SOFTPAY:F:isoutl.c|L:01307|60000000200810201801000280000492000010435107070020303032313130303238320034003228D4F55F51CBFF1D673D037DBBE5BADCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
但是当我执行时:
~$ sudo cat /dev/ttyUSB0 | grep --line-buffered "SOFTPAY:F:isoutl.c|L:01307|" | uniq | awk ' {FS="|"; print $3;}'
它什么都不打印。
答案 0 :(得分:2)
您的awk
命令应为:
awk -F'|' '{print $3}'
你拥有它的方式,你过早地设置你的字段分隔符。
或者,您可以在BEGIN
脚本中的awk
块中进行设置,如下所示:
awk 'BEGIN {FS="|"}; {print $3}'
或者您可以改为使用cut
命令:
cut -d\| -f3
答案 1 :(得分:0)
听起来uniq
等待/dev/ttyUSB0
关闭或发送更多输出。
Adam Batkin发布了这个答案,但删除了它:
uniq
命令只会在看到一行时返回输出 与前一行不同。例外是最后一行(或 它将在EOF
打印的一组行。但如果它没有得到EOF
,永远不会打印最后一行(或一组行)。
答案 2 :(得分:0)
我找到了。 / dev / ttyUSB0不发送Eof字符。当我将消息保存到文件并执行命令时:
sudo cat ./myfile | grep --line-buffered "SOFTPAY:F:isoutl.c|L:01307|" | uniq | awk -F "|" '{print $3}'
有效!