2017-02-13 63 views
0

顯示的系統功能的退出狀態,我運行以下命令來添加時間戳數據:抑制AWK

cat /dev/cu.usbmodem1421 | gawk '{printf "%s,%s\n",system("gdate +%s"),$0; fflush(); }' 

但是它也打印系統功能的退出狀態:

1487029247 
0,332 
1487029247 
0,332 
1487029247 
0,332 
1487029247 
0,332 
1487029247 
0,332 
1487029248 
0,332 
1487029248 
0,331 
1487029248 

如何隱藏退出狀態?

用於測試的簡單的bash腳本:

#!/bin/bash 
for i in $(seq 50) 
do 
    echo "Welcome $i times" 
    sleep 1 
done 

爲了測試新的腳本,運行:

./script.sh | gawk '{printf "%s,%s\n",system("gdate +%s"),$0; fflush(); }' 
+0

您需要在沒有awk的情況下顯示'cat/dev/cu.usbmodem1421'。另外,我不明白bash腳本是如何與上述程序相關的。 – user31264

+0

cat /dev/cu.usbmodem1421只需通過硬件每秒發送一個數字。 script.sh是一個等效的測試腳本。 –

回答

1

system返回RC碼,這是由印刷printf。你最好嘗試

system("gdate +%s"); print($0)` 

如果你不喜歡後gdate輸出換行,請閱讀本:https://www.gnu.org/software/gawk/manual/html_node/Getline_002fVariable_002fPipe.html#Getline_002fVariable_002fPipe

+0

我測試了這個:'./script.sh | gawk'{system(「gdate +%s%3N」); getline x; printf「%s,%s」,x,$ 0;}'',但getline被阻塞,因此不會打印任何值。 –

+0

您測試過的這種方法無效,爲什麼要這樣做? – user31264

+0

您在評論中寫的代碼根本沒有意義。我不明白是什麼讓你覺得它可能工作。 – user31264

1

要包括與其他AWK輸出一個shell命令的輸出爲:

awk -v OFS=',' 'BEGIN{cmd="gdate +%s"} (cmd | getline line) > 0{print line, $0; close(cmd)}' /dev/cu.usbmodem1421 

以上假設gdate +%s做任何你想要它寫的。有關如何/何時使用getline,請參見http://awk.freeshell.org/AllAboutGetline