Add NA When String is not found


 
Thread Tools Search this Thread
Top Forums Shell Programming and Scripting Add NA When String is not found
# 1  
Old 09-27-2018
Add NA When String is not found

I am searching for these patterns in my file between commas, when I dont find a pattern match I would Like to add NA.

Code:
awk '/Device ID:/ || /address:/ || /Interface:/ || /VLAN:/ || /Platform:/ || /Software/ {print $0,"NA"}' $tempdir/shcdpnedet > $tempdir/newtt

# 2  
Old 09-27-2018
Provide a sample of your input file....
# 3  
Old 09-27-2018
In addition to what shamrock has already said, please also tell us:
  • (every time you start a new thread) what operating system and shell you're using,
  • what output you hope to produce from the sample input you provide us, and
  • a clearer description of what you are trying to do (showing us code that doesn't work doesn't tell us much about what you are trying to do).
# 4  
Old 09-27-2018
Sorry - Windows os running cygwin

Sample input:
Code:
Device ID: ciscoblah
,
  IP address: 1.1.1.1
,
Platform: C5548P,  Capabilities: Switch IGMP CVTA phone port 
,
Interface: TenGigabitEthernet1/1,  Port ID (outgoing port): Ethernet1/1
,
Cisco Nexus Operating System (NX-OS) Software, Version 7.1(4)N1(1)
,
  IP address: 1.1.1.1
,


Desired output:

Code:
Device ID: ciscoblah,
  IP address: 1.1.1.1, Platform: C5548P,  Capabilities: Switch IGMP CVTA phone port ,Interface: TenGigabitEthernet1/1,  Port ID (outgoing port): Ethernet1/1,Cisco Nexus Operating System (NX-OS) Software, Version 7.1(4)N1(1), NA,  IP address: 1.1.1.1,

Code Im using:

Code:
awk '/Device ID:/ || /address:/ || /Interface:/ || /VLAN:/ || /Platform:/ || /Software/ {print $0,"NA"}' $tempdir/shcdpnedet > $tempdir/newtt

When a field that I am pulling with the awk command
Code:
'/Device ID:/ || /address:/ || /Interface:/ || /VLAN:/ || /Platform:/ || /Software/

isnt present, I would Like NA to be output in the place of the missing field.
# 5  
Old 09-27-2018
Quote:
Originally Posted by dis0wned
Sorry - Windows os running cygwin

Sample input:
Code:
Device ID: ciscoblah
,
  IP address: 1.1.1.1
,
Platform: C5548P,  Capabilities: Switch IGMP CVTA phone port 
,
Interface: TenGigabitEthernet1/1,  Port ID (outgoing port): Ethernet1/1
,
Cisco Nexus Operating System (NX-OS) Software, Version 7.1(4)N1(1)
,
  IP address: 1.1.1.1
,


Desired output:

Code:
Device ID: ciscoblah,
  IP address: 1.1.1.1, Platform: C5548P,  Capabilities: Switch IGMP CVTA phone port ,Interface: TenGigabitEthernet1/1,  Port ID (outgoing port): Ethernet1/1,Cisco Nexus Operating System (NX-OS) Software, Version 7.1(4)N1(1), NA,  IP address: 1.1.1.1,

Code Im using:

Code:
awk '/Device ID:/ || /address:/ || /Interface:/ || /VLAN:/ || /Platform:/ || /Software/ {print $0,"NA"}' $tempdir/shcdpnedet > $tempdir/newtt

When a field that I am pulling with the awk command
Code:
'/Device ID:/ || /address:/ || /Interface:/ || /VLAN:/ || /Platform:/ || /Software/

isnt present, I would Like NA to be output in the place of the missing field.
I am completely lost here. Your sample input file contains 12 lines (with each line being a record). There is no indication given anywhere in your sample input or in the description of your requirements specifying the order in which fields are supposed to be present. Since you specify that each output record should contain NA in the place of each missing input field in each record and since none of your input records contains more than one of the six strings you're looking for in various fields, why doesn't each of the 12 output records you would get from your 12 input records contain at least 5 occurrences of NA?

I see no relationship between your description of your requirements and the desired output you say you want from your sample input.

Note that what your code seems to do is look for six strings on each input line and, if and only if, at least one of those string is found, that input record is copied to the output with NA added as the last output field on that line. All other input lines are discarded. I don't see any relationship between your code and your requirements and I don't see any relationship between your code and the desired output you say you want.

If you can't write down a clear description of your requirements, it isn't surprising that you can't write code that will do what you want. If you can't write down a clear description of your requirements, there is no chance that anyone else will be able to write code that does what you want.
# 6  
Old 09-28-2018
I apologize, when I added the code I kept it to a minimum in an effort to keep it clearer.

Code:
awk '/-- show cdp neighbors detail --/,/- show diagnostic result module all detail --/' $tempdir/useful> $tempdir/shcdpnedet
awk '/Device ID:/ || /address:/ || /Interface:/ || /VLAN:/ || /Platform:/ || /Software/' $tempdir/shcdpnedet > $tempdir/newtt
tr -d '\015' < $tempdir/newtt > $tempdir/new
awk '/IP address/ { printf("%s\t", $0); next } 1' $tempdir/new> $tempdir/newt
awk '/Port ID / { printf("%s\t", $0); next } 1' $tempdir/newt > $tempdir/newt1
awk '/Native VLAN/ { printf("%s\t", $0); next } 1' $tempdir/newt1 > $tempdir/newt2
sed 's/Device/\n&/g' $tempdir/newt2  > $tempdir/newt3
awk '/Device ID:/ { printf("%s\t", $0); next } 1' $tempdir/newt3 > $tempdir/newt4
awk '/Platform:/ { printf("%s\t", $0); next } 1' $tempdir/newt4 > $tempdir/newt44
awk '/Software/ { printf("%s\t", $0); next } 1' $tempdir/newt44 > $tempdir/newt4

This is the code used to produce the output, I see the confusion with the additional fields in the desired output. If one of the input fields is not present, I would like to insert an NA
# 7  
Old 09-28-2018
OK. I get it. You don't want to tell us what you're trying to do. You just want us to guess at what you're trying to do by showing us code that doesn't work. Showing us more code that apparently doesn't do what you're trying to do doesn't help.

Sorry, but I can't help you under these conditions. Smilie
These 2 Users Gave Thanks to Don Cragun 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

Get 20 lines above string found, and 35 below string

i want to search a log for a string. when that string is found, i want to grab the a set number of lines that came before the string, and a set number of lines that come after the string. so if i search for the word "Error" in the /var/log/messages file, how can I output the 20 lines that came... (4 Replies)
Discussion started by: SkySmart
4 Replies

2. Shell Programming and Scripting

Modify a file by another file: add new line and variable after string is found

hello, I have problem with writing/adjusting a shell script. I searched forum and unfortunately couldn't write scipt based on the information I found. I never wtire such so it's hard for me and I do need to modify one script immediately. case looks like: 1. 'file' that needs to be modified... (3 Replies)
Discussion started by: bipbip
3 Replies

3. UNIX for Dummies Questions & Answers

Append a string on the next line after a pattern string is found

Right now, my code is: s/Secondary Ins./Secondary Ins.\ 1/g It's adding a 1 as soon as it finds Secondary Ins. Primary Ins.: MEDICARE B DMERC Secondary Ins. 1: CONTINENTAL LIFE INS What I really want to achieve is having a 1 added on the next line that contain "Secondary Ins." It... (4 Replies)
Discussion started by: newbeee
4 Replies

4. Shell Programming and Scripting

Grep a string and write a value to next line of found string

Hi, I have two variables x and y. i need to find a particular string in a file, a workflow name and then insert the values of x and y into the next lines of the workflow name. basically it is like as below wf_xxxxxx $$a= $$b= $$c= figo $$d=bentley i need to grep the 'wf_xxxx' and then... (6 Replies)
Discussion started by: angel12345
6 Replies

5. Shell Programming and Scripting

grep on string and printing line after until another string has been found

Hello Everyone, I just started scripting this week. I have no background in programming or scripting. I'm working on a script to grep for a variable in a log file Heres what the log file looks like. The x's are all random clutter xxxxxxxxxxxxxxxxxxxxx START: xxxxxxxxxxxx... (7 Replies)
Discussion started by: rxc23816
7 Replies

6. Linux

Find String in FileName and move the String to new File if not found

Hi all, I have a question.. Here is my requirement..I have 500 files in a path say /a/b/c I have some numbers in a file which are comma seperated...and I wanted to check if the numbers are present in the FileName in the path /a/b/c..if the number is there in the file that is fine..but if... (1 Reply)
Discussion started by: us_pokiri
1 Replies

7. Shell Programming and Scripting

Finding a string with another string is found

finding a string with another string is found EX: abs c/- i want to find /-, then copy abs. i know it's easy use awk, but my problem is the substr syntax. substr($2,2,2) will give me /- but the conflict is /- is not always the second characted of the second string. (11 Replies)
Discussion started by: engr.jay
11 Replies

8. Solaris

Can't install Unicode::String due to String.so not found

CPAN.pm: Going to build G/GA/GAAS/Unicode-String-2.09.tar.gz Checking if your kit is complete... Looks good Writing Makefile for Unicode::String cp String.pm blib/lib/Unicode/String.pm cp lib/Unicode/CharName.pm blib/lib/Unicode/CharName.pm /usr/bin/perl /usr/perl5/5.8.4/lib/ExtUtils/xsubpp... (5 Replies)
Discussion started by: PatrickBaer
5 Replies

9. Shell Programming and Scripting

Search for string and display those NOT found

In my script I read a input file and search all the files in a directory and it's sub-directories for that string using: find . -type f -print | xargs grep $var1 This just displays all the lines the string was found on. Too much data. What I need is to store in a file one time those... (17 Replies)
Discussion started by: John Rihn
17 Replies

10. Shell Programming and Scripting

Display only found string

Is there a way for grep to output only the found string and not the whole line? I have a ksh script which reads in a file and loops through every line looking up on a grep -f list. For it to only display only the string found i pass this to awk as a variable and loop through the list file using... (5 Replies)
Discussion started by: Cranie
5 Replies
Login or Register to Ask a Question