在Linux中使用awk从命令输出中查找特定数据

时间:2013-12-26 15:36:16

标签: linux bash shell awk

我想使用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匹配的行的5thGGA值 所以我用过这个,

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个值?

1 个答案:

答案 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