sed awk question

Thread Tools Search this Thread
Top Forums Shell Programming and Scripting sed awk question
# 8  
Old 08-12-2009

The example I provided has two occurances of <> within the same line. The final script will need to work with much more complex lines some containing 5 or 6 <>. I'm not oppossed to using perl, i also don't mind doing this in multiple commands. For example using one command to remove the beggining of the line up to the first < then using the awk command I have to delete the rest of the data in the line. This is the approach I am trying now. If someone has a perl command(s) to do the same I would be willing to try it.

# 9  
Old 08-12-2009
nawk -F'<|>' '{ for(i=2;i<=NF;i+=2) printf("%s%c", $i, (i==NF-1)?RS:OFS)}' myFile

# 10  
Old 08-12-2009
awk 'BEGIN{RS="<";FS="> "}{print $1}' filename

- sets record separator to "<" and field separator to ">": So, from
this is a <test> of removing <text> outside brackets

you have a set of records:
this is a 
test> of removing 
text> outside brackets

- and you are printing the first field before the ">" - it is obviose that you have what you have.
To remove first 'record' in your brake-down by "<" - use NR, when it is not 1: NR>1 or if (NR>1):
src> echo "some text <frst> more text <scnd> ending"| nawk 'BEGIN{FS=">"; RS="<";} NR>1 {print $1}'

It is new for me the construction '<|>', but I gess it means : field separator is '<' OR '>'
And you are printing only second field - so, what should you expect?!
Having that -F'<|>' you should only print even fields:
echo "some text <frst< else >scnd> end"| nawk -F'<|>' '{for (i=1;i<=NF;i++) if (i%2==0) print $i}'

- but now the AWK does not care which separator is used: see I have used them incorrectly, and it is not a problem for this code.

Last edited by alex_5161; 08-12-2009 at 06:32 PM..
# 11  
Old 08-12-2009
Thanks, both vgersh99 and alex_5161 solutions works.
# 12  
Old 08-12-2009
For sed:
echo "some text <frst.> else <scnd> end"| sed 's/[^<]*[<]*\([^>]*\)>*/\1/g'

- the text from \( to \) is saved by sed as a \1 (one more usage of the \(\) pair will saved \2, and so on..); so, that text is used for substitution.
That is what you had removed in your post.
Now need only remove everything else
So, part before open angle: [^<]* - everything, but not '<'
Next, the '<' is in range to have the '*' after that - so, having 0 or more times: than is needed to remove ending part that does not have the '<'.

I hope it is understandable.
# 13  
Old 08-13-2009
A snippet that can be added to something bigger:

i = split($0, a)
for(n=1; n<=i; n++)
if (match(a[n], /<.*>/) > 0)
print a[n]
# 14  
Old 08-13-2009
use below:-

nawk -v FS="<|>" '{print $1,$4}'

Login or Register to Ask a Question

Previous Thread | Next Thread

10 More Discussions You Might Find Interesting

1. Shell Programming and Scripting

yet another sed/awk question

Unix Guru's , I have a file all_files.txt containing data as follows all_files.txt first file : /a/b/c/ first second CLIENT1 second file : /a/b/c/ first second CLIENT1 first file : /a/b/c/ first second CLIENT2 second file : /a/b/c/ first second... (6 Replies)
Discussion started by: jville
6 Replies

2. Shell Programming and Scripting

awk question (or sed, if that's better to use)

Hi all, I'm pretty new to Unix (Sun) scripting, and wanted to try doing what many would probably believe is pretty easy. I tried searching the forums and only found bits and pieces of things I wanted to do below, but after many tries had a very hard time piecing it together. Would anyone... (1 Reply)
Discussion started by: chatguy
1 Replies

3. Shell Programming and Scripting

sed or awk question

Hello expert, I have an output file with few thousand lines similar like below : &quot;Future Netmgmt&quot; &quot;; &quot;N&quot; &quot;10&quot; &quot;; &quot;Circuitless-IP&quot; &quot; &quot; &quot;; &quot;Future Netmgmt&quot; &quot;; &quot;N&quot; &quot;10&quot; &quot;; &quot;Circuitless-IP&quot; &quot; &quot; &quot;; &quot;WAAS loopbacks&quot; &quot;;... (6 Replies)
Discussion started by: dannytrinh
6 Replies

4. UNIX for Dummies Questions & Answers

sed or awk question

hi there! i have a question that i hope someone may be able to help me with. i am using the 'paste' function to concatenate to files together. $ paste A B output: A B C D However I want to get rid of the space in between - I have tried the following with no luck: #... (2 Replies)
Discussion started by: thegant
2 Replies

5. UNIX for Dummies Questions & Answers

sed and awk question

Hi, I have to write a script that goes through every *.cpp file in the current directory and if any file has #includes of non-system header files (those with double quotes around them), then I need to print out those header files within the quotes. I've figured out how to run a for loop and find... (4 Replies)
Discussion started by: MEllis5
4 Replies

6. Shell Programming and Scripting

to sed or awk, that is the question?

I have a text file with about 790 lines, at the end of many of the lines there is the text string 'f4' I want this text to be 'f2' What is the best way to do this? is it sed or awk? or something else? how? Also, there is maybe fifty occasions where f4 appears near the begining of the line that I... (2 Replies)
Discussion started by: ajp7701
2 Replies

7. Shell Programming and Scripting

sed and awk question

hello, I have this in a file server_name=DB1 hostname=db1 I want to change hostname value to `hostname`. Any idea? and server_name value to toUPPER (`hostname`). Any idea? thanks (3 Replies)
Discussion started by: melanie_pfefer
3 Replies

8. UNIX for Advanced & Expert Users

A question on using sed or awk

Hi I have a pattern like this. repeating many lines CHANGE #13 TYP:22 CLS: 21 AFN:12 DBA:0x0040a15f OBJ:41142 SCN:0x0000.00036b3e SEQ:1 OP:11.2 CHANGE #15 TYP:32 CLS: 32 AFN:212 DBA:0x0040a15f OBJ:41143 SCN:0x0000.00046b3e SEQ:1 OP:13.3 . And i am trying to do the following: a) I need to get... (2 Replies)
Discussion started by: hare
2 Replies

9. Shell Programming and Scripting

Awk Sed question

i have to search direcotry with a Min or Max size and but with a standard find.... it gives me the size of the i-node of the directory. A friend told me to use awk/sed command to search directories. he also gave me this command: find -type d -exec du '{}' \; | awk -v sz=10 '{if... (0 Replies)
Discussion started by: AkiraSama
0 Replies

10. Shell Programming and Scripting

Sed or Awk Question

I have some text: 0400-0427 NA Czech Republic R. Prague 5990ca, 6200, 7345 0400-0456 NA, As Romania R. Romania Int'l 6115, 9515, 9690, 11895 0400-0500 NA U. S. A. WYFR 6065, 6855, 9505, 9715 0400-0500 NA,Eu,Af U. S. A. ... (8 Replies)
Discussion started by: petebear
8 Replies
Login or Register to Ask a Question