Need help with sed/awk command


 
Thread Tools Search this Thread
Top Forums Shell Programming and Scripting Need help with sed/awk command
# 15  
Old 10-21-2014
one more issue:

fields have no limit.
I mean lets say in dict1 fields are p, U
in dict2 may be T will be the field

all I mean to say is, Instead of saving field names as continuous string, dict[1].fieldName[1] = p, dict[1].fieldName[2] = U etc..
will be more unique

---------- Post updated at 12:05 PM ---------- Previous update was at 01:30 AM ----------

Can you explain this condition?
Code:
if (CNT==1 && !/^ *$/)


Last edited by linuxUser_; 10-20-2014 at 09:34 PM..
# 16  
Old 10-21-2014
Quote:
Originally Posted by linuxUser_
one more issue:

fields have no limit.
I mean lets say in dict1 fields are p, U
in dict2 may be T will be the field

all I mean to say is, Instead of saving field names as continuous string, dict[1].fieldName[1] = p, dict[1].fieldName[2] = U etc..
will be more unique
Why don't you give it a try? Every fieldname will have its own array element.
EDIT: Oh, got you now. shells don't have those structures. Recent shells with associative arrays might allow for an approach comig close...

Quote:
Can you explain this condition?
Code:
if (CNT==1 && !/^ *$/)

CNT represents the "level" of "{...}" nestings. So, if the level is 1 deep, and if there's more than an "empty" (nothing but spaces) line, print that. This is, of course, heavily depending on the structure of your file. If all the info were written in a single line, that logic would be doomed.
This User Gave Thanks to RudiC For This Post:
# 17  
Old 10-21-2014
Code:
#!/bin/bash
declare -a dictName;
declare -a planeName;
declare -a fieldName;
dCount=0;
pCount=0;
fCount=0;

awk     '/^ *functions */       {F=1; next}
         F                      {CNT=CNT+gsub(/{/,"")-gsub(/}/,""); if (CNT==1 && !/^ *$/) {dictName[dCount]=$0; dCount=$((dCount+1))} }
         /fields/               {for (i=3; i<NF; i++) {fieldName[fCount]=$i; fCount=$((fCount+1))}}
         /^ *surfaces */        {S=1; next}
         S                      {gsub(/[^0-9A-Za-z]*/, ""); if (!/^ *$/) {planeName[pCount]=$i; pCount=$((pCount+1)); S=0}}
        ' file


Hi, will it work something like this?(as shown above?)

I am able to get the names wat eva I want but unable to store in a string array.
# 18  
Old 10-21-2014
I don't think that will work. You can't use shell variables inside an awk script. There is a mechanism to pass variables (cf. man awk), but you won't get back any values into variables except by command substitution. On top, you stopped using that F logical variable half way. Try like second line
Code:
!F {next}

and then, somewhere reasonable, sth containing
Code:
!CNT {exit}

This may fail if the input file structure is different from the one you presented.

You could try printing all the assignments to a file and then source that file from your shell. Or, in recent shells with "process substitution" sth like
Code:
. <(awk 'BEGIN {print "X=17"}')
echo $X
17

This User Gave Thanks to RudiC For This Post:
# 19  
Old 10-21-2014
OMG... I see lot more stuffs to understand to finish this job Smilie

Can you give me a example storing a variable like this
Code:
declare -a dictName
j=0
while(some condition that satisfies my requirement-for looping)
dictName[j] <(awk '/^ *functions */       {F=1; next}
         F                      {CNT=CNT+gsub(/{/,"")-gsub(/}/,""); if (CNT==1 && !/^ *$/) {dictName[dCount]=$0; dCount=$((dCount+1))} }')

Thanks and Regards,
linuxUser_

---------- Post updated at 04:51 PM ---------- Previous update was at 04:49 PM ----------

One more thing, why is that space before the dictNames? when printing?
Can I remove that space ???
Code:
dictname[1]=[SPACE]planeDictName

# 20  
Old 10-21-2014
As I said, awk does NOT use shell variables like that, nor the $((...+1)) shell construct. As you are using bash, the process substitution might work. If
Code:
awk '                       {CNT=CNT+gsub(/{/,"")-gsub(/}/,"");
                                 if (CNT==1 && !/^ *$/) {gsub (/ /,_); print "dictname[" ++dc "]=" $0}
                                }
         /fields/               {for (i=3; i<NF; i++) print "fieldname[" ++fc "]="$i}
         /^ *surfaces */        {S=1; next}
         S                      {gsub(/[^0-9A-Za-z]*/, ""); if (!/^ *$/) {print "planename[" ++pc "]=" $0; S=0}}
        ' file

produces
Code:
dictname[1]=planeDictName
fieldname[1]=p
fieldname[2]=U
planename[1]=planeName
dictname[2]=planeDictName2
fieldname[3]=p
fieldname[4]=U
fieldname[5]=T
planename[2]=planeName

, sourcing the process substitution
Code:
. <(awk    '            {CNT=CNT+... )

will assign all those variables:
Code:
echo ${dictname[@]} ${planename[@]} ${fieldname[@]} 
planeDictName planeDictName2 planeName planeName p U p U T

But - be careful with that sourcing, as every malicious result will be executed as well!
This User Gave Thanks to RudiC For This Post:
# 21  
Old 10-21-2014
in this case pwd is not working.
I want to give file name with current directory path Smilie
what to do?
Login or Register to Ask a Question

Previous Thread | Next Thread

10 More Discussions You Might Find Interesting

1. Shell Programming and Scripting

Help with sed/awk command

Hi All, This is my first thread. Hopefully you guys can help me out. I have a csv file, that provides access to managers to a tool. The file is loaded onto our server containing all the assc id's with a trailing comma. For ex: 182950, 123456, However, we receive a file that... (8 Replies)
Discussion started by: Prateek Dubey
8 Replies

2. Shell Programming and Scripting

Need help with sed/awk command

Dear ALL, I am still struggling with some basic sed operations. I want to change path in a file as shown below: case_OM = PV4Reader( FileName='/home/linuxUser/demoCases/s1/case/case.OM' ) to case_OM = PV4Reader( FileName='/home/linuxUser/demoCases/s2/case/case.OM' ) In this file there... (5 Replies)
Discussion started by: linuxUser_
5 Replies

3. Shell Programming and Scripting

sed and awk giving error ./sample.sh: line 13: sed: command not found

Hi, I am running a script sample.sh in bash environment .In the script i am using sed and awk commands which when executed individually from terminal they are getting executed normally but when i give these sed and awk commands in the script it is giving the below errors :- ./sample.sh: line... (12 Replies)
Discussion started by: satishmallidi
12 Replies

4. Shell Programming and Scripting

Command line - awk, sed

My input file gfile values is CTRY=GM&PROJTYPE=SP&PROJECTTYPE=Small+Project If i am giving PROJECTTYPE then it must give Small Project awk -F"&" '{for (i=1; i<=NF; i++) if ($i ~ "^"PAT) {sub ("^"PAT"=", "", $i); sed 's/'+'/""/' $i ; print $i }}' PAT=$1 ... (6 Replies)
Discussion started by: nag_sathi
6 Replies

5. Shell Programming and Scripting

SED/AWK command

Hi All, I have a file which has following lines : - Deploy XXX application <server-address> - info <server-address> - Deploy XXX application <server-address> - info <server-address> - Deploy XXX application <server-address> - info <server-address> I want output like this way in... (8 Replies)
Discussion started by: bhaskar_m
8 Replies

6. Shell Programming and Scripting

Interpret sed and awk in the below command.

Could you interpret the following sed and awk command for me? command: cat tempfile2 |sed "s/\(BUILD-3-.*-\.-\)\(.*\..*\..*\)/\2/" | awk '{printf "%-8.8s %-23.23s %-30.30s %-50.50s\n", $1,$2,$3,substr($0,index($0,$4))}' > outfile2 2>/dev/null input:data in tempfile2... (5 Replies)
Discussion started by: vj8436
5 Replies

7. Shell Programming and Scripting

awk/sed Command : Parse parameter file / send the lines to the ksh export command

Sorry for the duplicate thread this one is similar to the one in https://www.unix.com/shell-programming-scripting/88132-awk-sed-script-read-values-parameter-files.html#post302255121 Since there were no responses on the parent thread since it got resolved partially i thought to open the new... (4 Replies)
Discussion started by: rajan_san
4 Replies

8. Shell Programming and Scripting

sed for this awk command

Hi what would be the sed equivalent of this awk command: awk '/$getsn/{getline;next}{print}' file It deletes the variable found and the next line after it in a file. Thanks (3 Replies)
Discussion started by: wisher115
3 Replies

9. Shell Programming and Scripting

Help with Sed or AWK command!!!

Hi, I need help with Sed or AWk command.i want to remove all the numerals from the file name.These files are stored within a text file and after the numerals are removed,i need to redirect its output to another new .txt file. Input: aa_1002985_952.xml aa_bb_032207.txt... (5 Replies)
Discussion started by: kumarsaravana_s
5 Replies

10. UNIX for Dummies Questions & Answers

What do you know about the Sed and Awk command??

I just need some information on what they can be use for and whatever else there is. anything you know, state here (2 Replies)
Discussion started by: TRUEST
2 Replies
Login or Register to Ask a Question