2011-03-01 22 views
0

當我執行以下行時,它將以換行符打印單詞。如何更改AWK中的現有打印行

awk 'BEGIN { print "line one\nline two\nline three" }' 

如何在同一行中刷新信息並刷新現有行?

例如,在執行循環時,它應該打印'one',然後擦除行並打印'two',然後擦除行並打印'three'等。請您協助我嗎?

回答

3

嘗試更改換行符\n以回車\r(這是否工作取決於您的終端設置)。哦,並打印一大堆尾隨空白符以清除前一行,並使用printf來避免print始終添加的自動\n

$ awk 'BEGIN { printf "line one \r" }'; sleep 2; awk 'BEGIN {printf "line two \r" }' 
0

通過「消滅行」,我假設你指的是carriage return這可以使用\r轉義序列來表示。

例如:

[[email protected]]$ awk 'BEGIN { print "line one\rline two\rline three" }' 
line three 

「行一個」和「行兩個」消失,因爲他們已經消滅和「三號線」所取代。

如果您希望文字在被清除前可以看到一段時間,則需要在每次打印之間插入延遲。

awk 'BEGIN{ 
    printf "line one"; 
    system("sleep 1"); 
    printf "\rline two"; 
    system("sleep 1"); 
    printf "\rline three"; 
}' 

,或者使用循環

echo "one two three" | awk '{ 
    for (i=1; i<=NF; i++) { 
     printf "\rline %s", $i; 
     system("sleep 1"); 
    } 
}'