2016-01-28 30 views
2

我想用awk/sed格式化我的輸出,但我不明白該怎麼做。我使用下面的命令:如何從輸出中省略特定的逗號?

uptime | awk '{print $1" " $2" " $3$4" " $6" " $10$11$12}' 
15:36:17 up 177days, 7 0.39,0.43,0.36 

我期望的輸出是

15:36:17 up 177days 7 0.39,0.43,0.36 

我想只省略第一個逗號之後,即「177天」之一。

回答

0

二者必選其一sub(替換用空字符串中的逗號)或substr(使所有子串,但在最後一個字符):

uptime | awk '{sub(",","",$4); print $1" " $2" " $3$4" " $6" " $10$11$12}' 

uptime | awk '{print $1" " $2" " $3 substr($4,1,length($4)-1) " " $6" " $10$11$12}' 
+0

Thanks @jas'uptime | awk'{sub(「,」,「」,$ 4);打印1美元「」2美元「」3美元4美元「」6美元「」10美元11美元12美元「」它的工作完美。然而第二個命令在我的機器上不起作用。 – user1234

+0

嗯,對我來說,它適用於'awk'和'gawk' ---發生了什麼?您是否收到錯誤或意外的輸出? – jas

+0

這是空白輸出,沒有顯示任何內容。 @ jas你說abt'gawk',是第二個命令是gawk? – user1234

0

試試你的命令的輸出管道連接到sed那會匹配任何字母后跟逗號的字母並替換爲該字符:

uptime | awk '{print $1" " $2" " $3$4" " $6" " $10$11$12}' | sed -r 's/(\w),/\1/' 
+0

謝謝@lelkadi,它也完美運作。因爲我在這裏是新手,你可以從這個'sed -r'/(\ w),/ \ 1 /''解釋我'\ w'和'\ 1'嗎?它肯定會幫助我很多。 – user1234

+0

'\ w'匹配任何單詞字符,並且由於嵌入在'()'中,匹配將被捕獲爲組號1,並且可以使用'\ 1'來訪問。因此,上面的正則表達式匹配一個單詞字符後跟一個逗號',',然後用捕獲的字符'\ 1'替換它們。 –

+0

感謝@lelkadi爲您解釋。 – user1234