If with grep in awk


 
Thread Tools Search this Thread
Top Forums Shell Programming and Scripting If with grep in awk
# 1  
Old 09-17-2014
If with grep in awk

Hi,

I have i/p file below

Code:
xxx.com
server version
dfsdfdfsd
asdafsf
---end---
diskspace
zdcdfzxcx
ZXccxvc

yyy.com
server version
w4ewr0as0dias90
324rwefdsok0
---end---
diskspace
.......


ddd.com
server version

ttt.com
diskspace

have four set of data, the first line is server name .com highlighted in blue.

if the server name found then it has to check server version (highlighted in red) and disk space (highlighted in purple) if both version and disk space present redirect to o/p1.txt file

if only disk space present redirect to another file o/p2.txt

if only server version redirect to other file o/p3.txt


below is my code just sample

Code:
awk ' 
a='server varsion' & b='disksapce'
{if (/.com/== 0) print $a $b > o/p.txt
}'  inputfile.txt


so if both disksapce andserver version present all the content (junk under server version "dfsdfdfsd asdafsf") should move to o/p file. shall i use
Code:
getline;print

to pint next line.

so please help me whether my code will work

Last edited by stew; 09-17-2014 at 07:16 AM..
# 2  
Old 09-17-2014
There are some syntax errors.
You cannot use the / character as part of filename - it means a directory.
Code:
a='server varsion' && b='disksapce'
awk -v a="$a" -v b="$b" '  /.com$/ {next}  {print a, b >"output.txt"} '  inputfile.txt

I've corrected syntax. The logic makes no sense to me. Please give expected output samples.
# 3  
Old 09-17-2014
I have a file like below (five set of data)

Code:
Input file.txt

aaaa
server-version
dsfsrjjgorgk
sfoweiurtit
disk space
ldkosdife
dsfjioeufs

bbbb
server-version
fker9i5toek
dsfmeu90e
disk space
fsgter6y
sfe5t5gf

cccc
server-version
sdt4wtrei
sfd5tet

dddd
disk space
ssretr
dferte56y

eeee
server-version
.............

my requirement is need to pass all server name one by one (aaaa,bbbb,cccc,ddddd......)

once we pass server name need to check both server-version and disk space are available if yes then redirect to o/p file like below

Code:
output1.txt


aaaa
server-version
dsfsrjjgorgk
sfoweiurtit
disk space
ldkosdife
dsfjioeufs

bbbb
server-version
fker9i5toek
dsfmeu90e
disk space
fsgter6y
sfe5t5gf

If only server-version is available rediect another file

Code:
output2.txt

cccc
server-version
sdt4wtrei
sfd5tet

eeee
server-version
.............

If only disk space is available redirect to third o/p file.

I am not sure how we can pass server name one by one (aaaa,bbbb,cccc..........) since server names are different.

so once I can pass it I will assign server-version and disk space in variable.

Last edited by stew; 09-17-2014 at 02:46 PM..
# 4  
Old 09-17-2014
Store all hostnames in a file ("servers" for example)...
Code:
cat servers
aaaa
cccc
dddd

Run the awk script on "InputFile.txt" to get the desired output separated by criteria into different files...
Code:
awk 'BEGIN {while (getline l < "servers" > 0) s[l]; RS=""; FS="\n"}
{
    if ($1 in s) {
        if ($0 ~ "server-version" && $0 ~ "disk space")        print $0 > "output1.txt"
        else if ($0 !~ "server-version" && $0 ~ "disk space")  print $0 > "output2.txt"
        else if ($0 ~ "server-version" && $0 !~ "disk space")  print $0 > "output3.txt"
    }
}' InputFile.txt

This User Gave Thanks to shamrock For This Post:
# 5  
Old 09-17-2014
but is there any way without placing all server name in a separate file to pass value
# 6  
Old 09-17-2014
Looks like you have a blank line between each record, so awk can split records on a blank line:

Code:
awk '/server-version/ && /disk *space/ {print $0 "\n"}' RS= inputfile.txt

Also note that I put " *" in between disk and space, as I'm unsure if you datafile has a space there or not.
# 7  
Old 09-18-2014
Thanks ShamRock

My doubt is if I pass only server name in output file 0
Code:
BEGIN {while (getline l < "servers name input file" > 0)

Its has only server (aaaa,bbbb,cccc...) then I can compare server name with server-version
Code:
aaaa="server-version

i.e,  if ($0 ~ "server-version" && $0 ~ "disk space")        print $0 > "output1.txt"

Login or Register to Ask a Question

Previous Thread | Next Thread

10 More Discussions You Might Find Interesting

1. UNIX for Beginners Questions & Answers

Using awk instead of grep -f

Hi Guys. I am trying to count occurances of patterns(occurance can be anywhere in file2) from file1 in file2. file1 is god god pod rod file2 is iamgod iamgod podrod 123rod456 output should be god 2 god 2 pod 1 rod 2 I am not good at awk but i figured out this command.it doesnt... (7 Replies)
Discussion started by: ahfze
7 Replies

2. Shell Programming and Scripting

sed and awk usage to grep a pattern 1 and with reference to this grep a pattern 2 and pattern 3

Hi , I have a file where i have modifed certain things compared to original file . The difference of the original file and modified file is as follows. # diff mir_lex.c.modified mir_lex.c.orig 3209c3209 < if(yy_current_buffer -> yy_is_our_buffer == 0) { --- >... (5 Replies)
Discussion started by: breezevinay
5 Replies

3. UNIX for Dummies Questions & Answers

Piping grep into awk, read the next line using grep

Hi, I have a number of files containing the information below. """"" Fundallinfo 6.3950 14.9715 14.0482 """"" I would like to grep for Fundallinfo and use it to read the next line? I ideally would like to read the three numbers that follow in the next line and... (2 Replies)
Discussion started by: Paul Moghadam
2 Replies

4. Shell Programming and Scripting

awk / grep

how do I change this line to use the awk command RC19=`grep -c "Broken pipe" $FTP_OUT` Code tags please (5 Replies)
Discussion started by: mbmarciniak
5 Replies

5. Shell Programming and Scripting

AWK/GREP: grep only lines starting with integer

I have an input file 12.4 1.72849432773174e+01 -7.74784188610632e+01 12.5 9.59432114416327e-01 -7.87018212757537e+01 15.6 5.20139995965960e-01 -5.61612429666624e+01 29.3 3.76696387248366e+00 -7.42896194101892e+01 32.1 1.86899877018077e+01 -7.56508762501408e+01 35 6.98857157014640e+00... (2 Replies)
Discussion started by: chrisjorg
2 Replies

6. Shell Programming and Scripting

Read content between xml tags with awk, grep, awk or what ever...

Hello, I trying to extract text that is surrounded by xml-tags. I tried this cat tst.xml | egrep "<SERVER>.*</SERVER>" |sed -e "s/<SERVER>\(.*\)<\/SERVER>/\1/"|tr "|" " " which works perfect, if the start-tag and the end-tag are in the same line, e.g.: <tag1>Hello Linux-Users</tag1> ... (5 Replies)
Discussion started by: Sebi0815
5 Replies

7. Shell Programming and Scripting

Is it better to grep and pipe to awk, or to seach with awk itself

This may just be a lack of experience talking, but I always assumed that when possible it was better to use a commands built in abilities rather than to pipe to a bunch of commands. I wrote a (very simple) script a while back that was meant to pull out a certain error code, and report back what... (4 Replies)
Discussion started by: DeCoTwc
4 Replies

8. Shell Programming and Scripting

MEM=`ps v $PPID| grep -i db2 | grep -v grep| awk '{ if ( $7 ~ " " ) { print 0 } else

Hi Guys, I need to set the value of $7 to zero in case $7 is NULL. I've tried the below command but doesn't work. Any ideas. thanks guys. MEM=`ps v $PPID| grep -i db2 | grep -v grep| awk '{ if ( $7 ~ " " ) { print 0 } else { print $7}}' ` Harby. (4 Replies)
Discussion started by: hariza
4 Replies

9. UNIX for Dummies Questions & Answers

grep and awk

I have grep MHz psrinfo-v.out it gives The i386 processor operates at 3000 MHz, The i386 processor operates at 3000 MHz, The i386 processor operates at 3000 MHz, The i386 processor operates at 3000 MHz, how to get instead of these 4 lines: CPU speed: 3000 MHz i.e. CPU... (3 Replies)
Discussion started by: melanie_pfefer
3 Replies

10. Shell Programming and Scripting

[grep awk cut] > awk

Hi, I'm very new to scripting. grep $s $filename | awk '{print $2}' | cut -c 1-8 How can I optimize this using a single awk? I tried: awk '/$s/ {print $2}' $filename | cut -c 1-8 However didn't work, I think the awk is not recognizing $s and the verbal is something else. (6 Replies)
Discussion started by: firdousamir
6 Replies
Login or Register to Ask a Question