0

So what I've been trying to do is replace a certain output in bash with awk. But I can't seem to get it to work. I'm trying to replace the $6 output from "uptime" to 'user' instead of 'users'. How can this be done with awk or sed?

This is a "part" of my current script.

#!/bin/bash

since="`uptime --since`"
start="`date --date "$since" '+%s'`"
now="`date '+%s'`"
sec=$((now-start))

days=$((sec/(60*60*24)))
sec=$((sec-days*(60*60*24)))

hr=$((sec/(60*60)))
sec=$((sec-hr*(60*60)))

min=$((sec/60))
sec=$((sec-min*60))

rest="$(uptime | perl -npe'{s/(.*,\s+)(\d+\s+use)/$2/}')"

printf `uptime | awk '{print $1}'`" up %2d:%02d,  %s\n" $hr $min "$rest"

The output is as following 21:08:13 up 0:10, 3 users load average: 0.30, 0.30, 0.25

  • 1
    Why not just uptime | awk '{ sub("users,","user,") }1' – Inian Jun 13 '19 at 8:50
  • I don't understand what you want. Is it just the final line of your script that you are talking about? If so, please remove all the irrelevant commands, and write a minimal example. Then, could you please show the output of uptime as you see it, and what you would like it to show? – Sparhawk Jun 13 '19 at 9:25
1

This looks like a lot of effort for something very trivial. Here is a simple sed command that replaces 'users' with 'user' in uptime output:

$ uptime | sed 's/users/user/'
 12:28:39 up 17:16,  7 user,  load average: 1.67, 1.41, 1.31
| improve this answer | |
0

sed command

uptime| sed '/users/s/users/user/g'

19:10:14 up 1 min, 2 user, load average: 0.42, 0.19, 0.07

awk

uptime| awk '/users/{gsub("users","user",$0);print $0}'
 19:11:19 up 2 min,  2 user,  load average: 0.14, 0.15, 0.06

python

!/usr/bin/python
import subprocess
cmd="uptime"
import re

k=subprocess.Popen(cmd,stdout=subprocess.PIPE,shell=True).communicate()[0].strip().split('\n')
#print k
for i in k:
    l=re.sub("users","user",i)
    print l
| improve this answer | |

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.