Grep echo awk print all output on one line


 
Thread Tools Search this Thread
Top Forums Shell Programming and Scripting Grep echo awk print all output on one line
# 29  
Old 03-23-2016
No need to define X="*" if you don't need it. I proposed that because in the first version you wanted all three *cpes when $1 was empty. So - remove that and just print the error message.
Then, to be on the safe side, set X="" before the case, and execute the awk only if X is non-empty: [ $X ] && awk '...' ...
This User Gave Thanks to RudiC For This Post:
# 30  
Old 03-23-2016
I thought I could get away with not defining X="*"but that was the first thing I tried and it fails. So, without X="*", I get every single device (including ones I didn't specify) sorted by software version. No error message.

Setting X=""before the caseand adding [ $X ] &&in front of my awkfixed it!

One task to go, and I hope I'm done with this. Just need to figure out how to do my -vto search for specific software versions matched against the first 5 characters of the version, skipping the first character [for the search, but still printing it

Example of what my awklooks at in show.version

JUNOS Base OS boot [12.3R7.7]

I'm honestly not sure how to even start this in my awk.

I'm assuming it requires another sub (...)but my brain is refusing to cooperate. I spent a good chunk of my night searching out the answer to the last problem before giving in to ask you for help, so I feel a little fried.
# 31  
Old 03-23-2016
So how would you pass the -v (plus version info) to cver? Like cver -c -v 12.3R, i.e. second and third parameter? What error checking needs to be done?
# 32  
Old 03-23-2016
Yeah, exactly like that. At minimum, they need to be able to search the first two digits and at max the whole thing. Searching only the first digit would be the equivalent of not using -v.

All software versions start with two digits, followed by a .
The place after .contains a single digit of 0-9
After that the next character is either R or S
After R or S it seems the next digit could be 0-9 or double digit like 11 followed by a . then a single digit 0-9

I don't want to limit any of the engineers from being able to search a full version, because I don't know how specific of a version someone might want to search for. I do know at minimum, they have to use -vfollowed by two digits.

If whatever they search for doesn't exist, a simple "No match found" message will suffice.

Ex:
Code:
cver -c -v 14
No match found

Whatever they do search that exists shows everything up to what they searched and includes anything that may be after it.

Ex:
Code:
cver -c -v 12.3
[12.3R6.6] device1-r0.cpe.domain.net
[12.3R6.6] device2-r0.cpe.domain.net
[12.3R7.7] device3-r1.cpe.domain.net
...

I hope that answers your questions.
# 33  
Old 03-23-2016
Well, this is becoming more and more complicated, and more and more error checking would need to be done, like parameter count, value validation, etc. - which I neglect here, or leave it up to the reader, resp.
OK, run the awk like
Code:
 awk -vSRCH=$3" '/JUNOS/ && /boot/ && $5 ~ "^\[" SRCH {...}'...

This doesn't check for $2 to be -v, and if $3 is missing, field 5 in the file is just checked to start with the [ char.

Last edited by RudiC; 03-23-2016 at 08:30 AM.. Reason: typos, typos, and typos
# 34  
Old 03-24-2016
Yeah, I'll tackle this tonight when I come in for my shift. For now, it's quitting time and I need rest. Thanks again!

---------- Post updated 03-24-16 at 01:07 AM ---------- Previous update was 03-23-16 at 07:29 AM ----------

Ok, so I gave it a shot and it breaks my -c, -e, -ocommands.

Your suggestion
awk -vSRCH=$3" '/JUNOS/ && /boot/ && $5 ~ "^\[" SRCH {...}'...

I got a missing double quote error trying to paste into shell. Added it around $3.

[ $X ] && awk -vSRCH="$3" '/JUNOS/ && /boot/ && $5 ~ "^\[" SRCH {...}'...

Then gave me:
Code:
clmbn-eng2.eng:~% cver -c
awk: nonterminated character class ^[
 input record number 3, file /home/clmbn-eng2/a/rwalker/svn/nw_config_data/device1-e0.cpe.domain.net/show.version
 source line number 1

So I added [] around "^\["and got -c, -e, -o working again.

[ $X ] && awk -vSRCH="$3" '/JUNOS/ && /boot/ && $5 ~ "[^\[]" SRCH {...}'...

Now it gets interesting...

cver -c -vruns the same as cver -c, but I'm ok with that. The engineers will figure out that won't work so well for them without an actual search term after -v. Ultimately, it would be cool if -vwas undefined by the user if it worked like my (*)where it does echo "Unrecognized or incomplete command.\nUse -h for help."but really, I'm not too worried about that.

cver -c -v 1prints a list of all versions with 1 in them, but not all of them oddly. I don't get all of version 10 or any results for 12 and 13. Searching any digit 0-9 (except 1) will return a list of any software version that has any of those numbers in it anywhere in the version.

cver -c -v 10doesn't print any software versions starting with 10. Instead, it printed a list of versions with 10 in it somewhere else.

Ex:
[11.4R10.3] device-e0.cpe.domain.net

cver -c -v 11prints nothing. From the example above, I have devices with software version 11.

cver -c -v 12prints nothing. I have multiple devices software versions starting with 12.

cver -c -v 13prints nothing. I do have one device in -c with a 13. software version.

cver -e -v 14prints nothing. I do have one device in -e with a 14. software version.

---------- Post updated at 04:05 AM ---------- Previous update was at 01:07 AM ----------

I think I fixed it.

Do this:
"[\[^]"

Instead of this:
"[^\[]"

Now I have

[ $X ] && awk -vSRCH="$3" '/JUNOS/ && /boot/ && $5 ~ "[\[^]" SRCH {...}'...

Last edited by rwalker; 03-24-2016 at 04:47 AM.. Reason: added code, corrected results of cver -c -v 1, typos
# 35  
Old 03-24-2016
I regret it doesn't work out that well for you. Unfortunately I could do only very basic testing without some serious test data, but it worked for me. Must be a awk version problem, probably with the escaping of the [ char. It's just that char that needs escaping. Try $5 ~ "^[[]" SRCH. It needs the ^ in front!
Sorry for missing the matching double quote.
This User Gave Thanks to RudiC For This Post:
Login or Register to Ask a Question

Previous Thread | Next Thread

10 More Discussions You Might Find Interesting

1. Shell Programming and Scripting

Echo print on same line while loop using variable

Currently using below script but echo it print the output in two line. Input file all-vm-final-2.txt CEALA08893 SDDC_SCUN DS_SIO_Workload_SAPUI_UAT_01 4 CEALA09546 SDDC_SCUN DS-SIO-PD5_Workload_UAT_SP1_Flash_07 4 CEALA09702 SDDC_SCUN DS-VSAN-RMP-WORKLOAD01 4 DEALA08762 SDDC_LDC... (3 Replies)
Discussion started by: ranjancom2000
3 Replies

2. Shell Programming and Scripting

(n)awk: print regex search output lines in one line

Hello. I have been looking high and low for the solution for this. I seems there should be a simple answer, but alas. I have a big xml file, and I need to extract certain information from specific items. The information I need can be found between a specific set of tags. let's call them... (2 Replies)
Discussion started by: Tobias-Reiper
2 Replies

3. Shell Programming and Scripting

Print awk output in same line ,For loop

My code is something like below. #/bin/bash for i in `ps -ef | grep pmon | grep -v bash | grep -v grep | grep -v perl | grep -v asm | grep -v MGMT|awk '{print $1" "$8}'` do echo $i ORACLE_SID=`echo $line | awk '{print $2}'` USERNAME=`echo $line | awk '{print $1}'` done ============= But... (3 Replies)
Discussion started by: tapia
3 Replies

4. Shell Programming and Scripting

Echo printing a line in 2 lines; expected to print in one line

Dear All, fileName: therm.txt nc3h7o2h 7/27/98 thermc 3h 8o 2 0g 300.000 5000.000 1390.000 41 1.47017550e+01 1.71731699e-02-5.91205329e-06 9.21842570e-10-5.36438880e-14 2 -2.99988556e+04-4.93387892e+01 2.34710908e+00 4.34517484e-02-2.65357553e-05 3 ... (7 Replies)
Discussion started by: linuxUser_
7 Replies

5. Shell Programming and Scripting

Use less pipe for grep or awk sed to print the line not include xx yy zz

cat file |grep -v "xx" | grep -v "yy" |grep -v "zz" (3 Replies)
Discussion started by: yanglei_fage
3 Replies

6. Shell Programming and Scripting

Print (echo) variable in a single line

Hi, I have written this code ------------------------------------------------ # !/bin/ksh i=0 while do j=$i while do echo -e $j #printf "%d",$j j=`expr $j - 1` done echo i=`expr $i + 1` done ---------------------------------------------------- The ouput which... (2 Replies)
Discussion started by: rac
2 Replies

7. UNIX for Dummies Questions & Answers

Grep /Awk letters X - X in every line and print it as a mac address

hey i m kinda new to this so i will appreciate any help , i have this list of values: pwwn = 0x50012482009cd7a7 nwwn=0x50012482009cd7a6 port_id = 0x280200 pwwn = 0x5001248201bcd7a7 nwwn=0x5001248201bcd7a6 port_id = 0x280300 pwwn = 0x50012482009c51ad nwwn=0x50012482009c51ac port_id =... (4 Replies)
Discussion started by: boaz733
4 Replies

8. Shell Programming and Scripting

Awk+Grep Input file needs to match a column and print the entire line

I'm having problems since few days ago, and i'm not able to make it works with a simple awk+grep script (or other way to do this). For example, i have a input file1.txt: cat inputfile1.txt 218299910417 1172051195 1172070231 1172073514 1183135117 1183135118 1183135119 1281440202 ... (3 Replies)
Discussion started by: poliver
3 Replies

9. Shell Programming and Scripting

awk help required to group output and print a part of group line and original line

Hi, Need awk help to group and print lines to format the output as shown below INPUT FORMAT set echo on set heading on set spool on /* SCHEMA1 */ CREATE TABLE T1; /* SCHEMA1 */ CREATE TABLE T2; /* SCHEMA1 */ CREATE TABLE T3; /* SCHEMA1 */ CREATE TABLE T4; /* SCHEMA1 */ CREATE TABLE T5;... (5 Replies)
Discussion started by: rajan_san
5 Replies

10. UNIX for Dummies Questions & Answers

How do I output or echo NONE if grep does not find anything?

I am performing a grep command and I need to know how to echo "NONE" or "0" to my file if grep does not find what i am looking for. echo What i found >> My_File grep "SOMETHING" >> My_File I am sure this is easy, I am sort of new at this! Thanks (2 Replies)
Discussion started by: jojojmac5
2 Replies
Login or Register to Ask a Question