我想使用awk从命令输出中读取特定数据, 从这里开始,http://www.thegeekstuff.com/2010/01/awk-introduction-tutorial-7-awk-print-examples/
我已经学会了如何从文本文件中读取数据,但我不想从文本文件中读取数据, 我想要从这个命令的输出中读取数据,
stty -F /dev/ttyUSB0 ispeed 4800 && cat < /dev/ttyUSB0
命令的输出如下,
$GPGGA,152826.996,2452.8328,N,06701.2544,E,1,03,3.2,32.7,M,-46.4,M,,0000*48
$GPGSA,A,2,16,23,32,,,,,,,,,,4.5,3.2,3.2*35
$GPRMC,152826.996,A,2452.8328,N,06701.2544,E,2.03,112.95,261213,,,A*6F
$GPGGA,152827.995,2452.8282,N,06701.2520,E,1,03,3.2,32.7,M,-46.4,M,,0000*49
$GPGSA,A,2,16,23,32,,,,,,,,,,4.5,3.2,3.2*35
$GPRMC,152827.995,A,2452.8282,N,06701.2520,E,0.45,148.25,261213,,,A*6A
我想从上面的输出中读取与3rd
匹配的行的5th
和GGA
值
所以我用过这个,
awk -F"," '/GGA/ {print $3,$5}'
此处,-F defines a field separator, i.e. ','
我的最终命令是,
awk -F"," '/GGA/ {print $3,$5}' stty -F /dev/ttyUSB0 ispeed 4800 && cat < /dev/ttyUSB0
但该命令不输出任何内容并给出以下错误,
awk:无法打开stty(没有这样的文件或目录)
所以我试过
awk -F"," '/GGA/ {print $3,$5}' | stty -F /dev/ttyUSB0 ispeed 4800 && cat < /dev/ttyUSB0
我不知道我在哪里读过这个,但我知道它必须对|
做一些事情,这就是为什么我尝试了上面的命令,但仍然没有任何反应,这次我必须终止使用CTRL+C
如何仅输出与GGA匹配的行的第3和第5个值?
答案 0 :(得分:1)
你应该把管道(|
)写成相反的链接:
stty -F /dev/ttyUSB0 ispeed 4800 && cat < /dev/ttyUSB0 | awk -F"," '/GGA/ {print $3,$5}'
以便将cat < /dev/ttyUSB0
的输出输入您的awk
命令
请注意,您应该删除对cat
命令的调用:
stty -F /dev/ttyUSB0 ispeed 4800 && awk -F"," '/GGA/ {print $3,$5}' < /dev/ttyUSB0