【问题标题】:How can I omit a specific comma from my output?如何从输出中省略特定的逗号?
【发布时间】:2016-05-05 14:43:02
【问题描述】:

我想使用 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  

我只想省略第一个逗号,即“177days”之后的那个。

【问题讨论】:

    标签: unix awk sed scripting


    【解决方案1】:

    使用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}'
    

    【讨论】:

    • 谢谢@jas uptime | awk '{sub(",","",$4); print $1" " $2" " $3$4" " $6" " $10$11$12}' 它运行良好。但是第二个命令在我的机器上不起作用。
    • 嗯,对我来说它适用于 awkgawk --- 发生了什么?您是否收到错误或意外输出?
    • 这是空白输出,没有显示任何内容。 @jas 你说 abt 'gawk' ,第二个命令是给 gawk 的吗?
    • 这里没有特定于 gawk 的内容(我在 Mac OS X 上使用普通的 awk)。奇怪的是你不会得到任何输出也没有错误。您完全从答案中复制并粘贴了吗?没有错过任何开盘或收盘报价? (很抱歉问了这么明显的事情,但这是一个真正的谜。)
    • 是的@jas,我完全从答案中粘贴...但没有得到任何输出。
    【解决方案2】:

    尝试将您的命令输出通过管道传送到sed,该sed 将匹配任何后跟逗号的字母字符并将其替换为该字符:

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

    【讨论】:

    • 感谢@lekadi,它也运行良好。因为我是新来的,你能从这个sed -r 's/(\w),/\1/'解释我\w\1吗?它肯定会对我有很大帮助。
    • \w 匹配任何单词字符,并且由于嵌入在 () 中,匹配将被捕获为组号 1,并且可以使用 \1 访问。所以上面的正则表达式匹配一个单词字符后跟一个逗号,,然后将它们替换为仅捕获的字符\1
    • 感谢@lekadi 的解释。
    猜你喜欢
    • 1970-01-01
    • 2016-04-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-09-29
    • 1970-01-01
    • 2018-02-21
    • 1970-01-01
    相关资源
    最近更新 更多