Struck at shell command

Can someone help me to get two different outputs mentioned in code tags.
Input:

user=alexander
registeredwebsite=yahoo.com

user=james
registeredwebsite=gmail.com
registeredwebsite=fb.com
registeredwebsite=google.com

user=kelly
registeredwebsite=gmail.com
registeredwebsite=fb.com
registeredwebsite=google.com

user=natasha
registeredwebsite=gmail.com
registeredwebsite=fb.com
registeredwebsite=yahoo.com

user=bipasha
registeredwebsite=hotmail.com
registeredwebsite=medicus.com
registeredwebsite=yahoo.com

user=paul
registeredwebsite=yahoo.com

user=mike
registeredwebsite=yahoo.com

Need List of users registered only in yahoo.com website.

Output-1:

Users Registered only on yahoo.com website are:

user=alexander
user=paul
user=mike

Need list of users registered not only yahoo but also other websites.

Output-2:

Users Registered on yahoo.com but also other websites are:

user=natasha
user=bipasha

With all of the help you got on your last request: Need help for count using shell, you must have a good start on a script to do this.

Show us what you have tried, show us the output it produces (both normal output and diagnostic messages).

1 Like

Hi Don Cragun,

I tried below but it did't worked.

awk '/pattern/{nr[NR]; nr[NR+4]}; NR in nr' file
[buzzme]$ awk '/yahoo\.com/ && NF==2 {print $1}' RS= buzzme.file
user=alexander
user=paul
user=mike

[buzzme]$ awk '/yahoo\.com/ && NF>2 {print $1}' RS= buzzme.file
user=natasha
user=bipasha

---------- Post updated at 07:44 PM ---------- Previous update was at 06:56 PM ----------

perl -00 -alne '
    /yahoo\.com/ and push @{$yahoo{scalar @F == 2}}, $F[0];
    END{ print "Yahoo Only:\n", join "\n", @{$yahoo{1}};
         print "Yahoo Plus:\n", join "\n", @{$yahoo{$undef}};
    }
' buzzme.file
Yahoo Only:
user=alexander
user=paul
user=mike

Yahoo Plus:
user=natasha
user=bipasha
1 Like

Small variation:

awk -F= 'NF==4 && $4=="yahoo.com"{print $2}' RS= file
alexander
paul
mike

The condition for using RS= (set the RS variable to an empty string) is that the separation between segments must consist of two or more consecutive newlines, nothing else (no extra spaces).

--
Otherwise, try something like:

awk -F= '$1=="user"{if(n)print n; n=$2; next} NF && $2!="yahoo.com"{n=""} END{if(n)print n}' file

or:

awk -F= '$1=="user"{if(n)print n; n=$2; next} $1=="registeredwebsite" && $2!="yahoo.com"{n=""} END{if(n)print n}' file
1 Like
users={}
mark=[]
with open("a.txt") as file:
	for line in file:
		line=line.replace("\n","")
		if len(line)==0:
			continue
		if 'user=' in line:
			user=line
		else:
			if user in users:
				users[user] += 1
			else:
				users[user] = 1
			if 'yahoo' in line:
				mark.append(user)
print("========not only yahoo=========")
for user in mark:
	if users[user]>1:
		print(user)

print("========yahoo=========")	
for i in mark:
	print(i)
	
print("========only yahoo=========")	
for i in mark:
	if users==1:
		print(i)
1 Like