''tail -f | gawk | tee'' 没有输出; ''tail -f | gawk'' 或 ''gawk | tee'' 都可以正常工作

No output from ''tail -f | gawk | tee''; either ''tail -f | gawk'' or ''gawk | tee'' works fine

tee 如果放在 gawk 命令之前可以正常工作,但如果放在之后则根本不起作用。 gawk之后是不是不能用了?

#!/bin/bash
CURRENT_DATE=`date -u +%Y-%m-%d`

tail -fn0 /var/log/pi-star/MMDVM-"$CURRENT_DATE".log | gawk ' match([=13=], 
/received.*voice header from ([[:alnum:]]+) to ([[:alnum:]]+ [0-9]+)/, 
a) {
in_record = 1
call_sign = a[1]
channel = a[2]
}
in_record && match([=13=], /DMR ID: ([0-9]+)/, a) {
dmr_id = a[1]
}
in_record && match([=13=], /([0-9.]+) seconds, ([0-9]+)% packet loss, BER: 
([0-9.]+)%/, a) {
in_record = 0
print call_sign, channel, dmr_id, a[1], a[2], a[3]
} ' OFS=, | tee -a log.txt

EDITED - 在 TAIL 之后但在 GAWK 之前放置 tee 命令时使用上面的 bash 脚本,我得到了被跟踪的原始日志的完美复制,但随之而来的是 GAWK 不需要的所有信息是过滤。当我将 tee 命令放在文件末尾时(如上所示),log.txt 文件中没有任何内容,原始日志更改时屏幕上也没有显示任何内容。

这是 tail 命令中原始日志文件的一部分。

M: 2019-06-10 00:00:03.667 DMR Slot 2, received network voice header 
from W3DON to TG 310
M: 2019-06-10 00:00:03.911 DMR Slot 2, received network end of voice 
transmission, 0.5 seconds, 0% packet loss, BER: 0.0%
M: 2019-06-10 00:00:11.611 DMR Slot 2, received network voice header 
from KD2QDD to TG 310
M: 2019-06-10 00:00:11.634 DMR Slot 2, received network end of voice 
transmission, 0.5 seconds, 12% packet loss, BER: 0.0%
M: 2019-06-10 00:00:12.703 DMR Slot 2, received network voice header 
from IZ0LDE to TG 310
M: 2019-06-10 00:00:13.932 DMR Slot 2, received network end of voice 
transmission, 1.2 seconds, 0% packet loss, BER: 0.0%
M: 2019-06-10 00:00:20.426 DMR Slot 2, received network voice header 
from N1GMB to TG 310
M: 2019-06-10 00:00:26.293 DMR Slot 2, received network end of voice 
transmission, 6.7 seconds, 9% packet loss, BER: 0.0%
M: 2019-06-10 00:00:34.722 DMR Slot 2, received network voice header 
from N1GMB to TG 310
M: 2019-06-10 00:00:35.197 DMR Talker Alias (Data Format 1, Received 
6/10 char): 'TAC 31'
M: 2019-06-10 00:00:35.197 DMR Slot 2, Embedded Talker Alias Header
M: 2019-06-10 00:00:35.197 0000:  04 00 54 54 41 43 20 33 31                         
*..TTAC 31*
M: 2019-06-10 00:00:35.892 DMR Talker Alias (Data Format 1, Received 
10/10 char): 'TAC 310 NC'
M: 2019-06-10 00:00:35.892 DMR Slot 2, Embedded Talker Alias Block 1
M: 2019-06-10 00:00:35.892 0000:  05 00 30 20 4E 43 00 00 00                         
*..0 NC...*
M: 2019-06-10 00:00:52.569 DMR Slot 2, received network end of voice 
transmission, 18.2 seconds, 2% packet loss, BER: 0.0%
M: 2019-06-10 00:00:53.700 DMR Slot 2, received network voice header 
from K6FCC to TG 310
M: 2019-06-10 00:00:53.851 DMR Slot 2, received network end of voice 
transmission, 0.5 seconds, 0% packet loss, BER: 0.0%
M: 2019-06-10 00:00:54.605 DMR Slot 2, received network voice header 
from KC8QCH to TG 310
M: 2019-06-10 00:00:56.168 DMR Slot 2, network watchdog has expired, 
1.8 seconds, 80% packet loss, BER: 0.0%
M: 2019-06-10 00:01:01.253 DMR Slot 2, received network voice header 
from N1GMB to TG 310
M: 2019-06-10 00:01:01.735 DMR Talker Alias (Data Format 1, Received 
6/10 char): 'TAC 31'
M: 2019-06-10 00:01:01.735 DMR Slot 2, Embedded Talker Alias Header
M: 2019-06-10 00:01:01.735 0000:  04 00 54 54 41 43 20 33 31                         
*..TTAC 31*
M: 2019-06-10 00:01:02.426 DMR Talker Alias (Data Format 1, Received 
10/10 char): 'TAC 310 NC'
M: 2019-06-10 00:01:02.426 DMR Slot 2, Embedded Talker Alias Block 1
M: 2019-06-10 00:01:02.426 0000:  05 00 30 20 4E 43 00 00 00                         
*..0 NC...*
M: 2019-06-10 00:01:06.507 DMR Slot 2, received network end of voice 
transmission, 5.5 seconds, 1% packet loss, BER: 0.0%

使用GAWK命令清除上面的内容如下:

K6ASF,TG 310,3158238,0.5,0,0.0

这有助于澄清吗?

从您的 awk 程序中调用 fflush() 以强制立即写入输出,即使不是 TTY。

也就是说——你的print命令之后,添加一个额外的命令fflush().

标记社区 Wiki 以避免从回答 a duplicate question 中获得 reputation/points。