What is wrong with my if loop?


 
Thread Tools Search this Thread
Top Forums Shell Programming and Scripting What is wrong with my if loop?
# 1  
Old 08-18-2014
What is wrong with my if loop?

Hello everyone,

I need a little help. I wrote a cshell script to change the format of a file but it is not working.

input file is like that:

Code:
2014  3 20 15  0     5.270 40.7739  27.6471  20.232   0.6  0  0  0      1
Site6    4.081  1.00 P
Site6    7.585  1.00 S
Site1    4.441  1.00 P
Site1    6.922  1.00 S
Site7    4.743  1.00 P
Site7    8.710  1.00 S
2014  3 20 15  3    33.491 40.9253  27.6682  22.619   1.2  0  0  0      1
Site1    4.483  1.00 P
Site1    7.798  1.00 S
Site6    9.443  1.00 S
Site7   10.101  1.00 S
2014  3 20 15 30    46.430 40.8773  27.8578   6.660   9.9  0  0  0      1
Site7    5.938  1.00 S
Site1    6.202  1.00 S
Site6    7.728  1.00 S

and I want the output file like that:

Code:
2014  3 20 15  0     5.270 40.7739  27.6471  20.232   0.6  0  0  0      1
Site6P    4.081  1.00
Site6S    7.585  1.00
Site1P    4.441  1.00 
Site1S    6.922  1.00 
Site7P    4.743  1.00 
Site7S    8.710  1.00 
2014  3 20 15  3    33.491 40.9253  27.6682  22.619   1.2  0  0  0      1
Site1P    4.483  1.00 
Site1S    7.798  1.00 
Site6S    9.443  1.00 
Site7S   10.101  1.00 
2014  3 20 15 30    46.430 40.8773  27.8578   6.660   9.9  0  0  0      1
Site7S    5.938  1.00 
Site1S    6.202  1.00 
Site6S    7.728  1.00

I use csh to change the format and my if loop is that:
Code:
foreach line ("`cat pha.dat`")
set argv = ( $line )
set name1 = $1

if $name1 == 2014 then
awk '{print $0}' pha.dat > dnm

else

awk '{ print $1, $4, $2, $3}' pha.dat > dnm

endif

end

the output is:

Code:
2014 3 0 20 15
Site6 P 4.081 1.00
Site6 S 7.585 1.00
Site1 P 4.441 1.00
Site1 S 6.922 1.00
Site7 P 4.743 1.00
Site7 S 8.710 1.00
2014 3 3 20 15
Site1 P 4.483 1.00
Site1 S 7.798 1.00
Site6 S 9.443 1.00
Site7 S 10.101 1.00
2014 3 30 20 15
Site7 S 5.938 1.00
Site1 S 6.202 1.00
Site6 S 7.728 1.00

which is not what I want. The loop is not working? Where am I making mistake?

Thank you!!!
# 2  
Old 08-18-2014
I can't help with csh, but one question jumps to my mind: if using awk anyhow, why not do the entire task with it?
# 3  
Old 08-18-2014
Quote:
Originally Posted by RudiC
I can't help with csh, but one question jumps to my mind: if using awk anyhow, why not do the entire task with it?
I also tried something like that

Code:
awk '{
if ($1 >=2014)
        print $0;
else
        print $1, $4, $2, $3;
}'

Could not make it work too...
# 4  
Old 08-18-2014
Echoing Rudic's comments, you can try below:

Code:
awk 'NF==4{sub($1,"&"$NF);sub(/. *$/,"")}1' pha.dat

Update: Realised you wanted to remove the 4th column as well.

Last edited by pilnet101; 08-18-2014 at 04:52 AM..
# 5  
Old 08-18-2014
Try this small adaption to your awk attempt:
Code:
awk '{
if ($1+0 >= 2014)
        print $0;
else
        print $1$4, $2, $3;
}' file
2014  3 20 15  0     5.270 40.7739  27.6471  20.232   0.6  0  0  0      1
Site6P 4.081 1.00
Site6S 7.585 1.00
Site1P 4.441 1.00
Site1S 6.922 1.00
Site7P 4.743 1.00
Site7S 8.710 1.00
2014  3 20 15  3    33.491 40.9253  27.6682  22.619   1.2  0  0  0      1
Site1P 4.483 1.00
Site1S 7.798 1.00
Site6S 9.443 1.00
Site7S 10.101 1.00
2014  3 20 15 30    46.430 40.8773  27.8578   6.660   9.9  0  0  0      1
Site7S 5.938 1.00
Site1S 6.202 1.00
Site6S 7.728 1.00

or, try
Code:
awk '$1 !=  "2014"    {print $1$4, $2, $3; next}
     1
    ' file

# 6  
Old 08-18-2014
Quote:
Originally Posted by RudiC
Try this small adaption to your awk attempt:
Code:
awk '{
if ($1+0 >= 2014)
        print $0;
else
        print $1$4, $2, $3;
}' file
2014  3 20 15  0     5.270 40.7739  27.6471  20.232   0.6  0  0  0      1
Site6P 4.081 1.00
Site6S 7.585 1.00
Site1P 4.441 1.00
Site1S 6.922 1.00
Site7P 4.743 1.00
Site7S 8.710 1.00
2014  3 20 15  3    33.491 40.9253  27.6682  22.619   1.2  0  0  0      1
Site1P 4.483 1.00
Site1S 7.798 1.00
Site6S 9.443 1.00
Site7S 10.101 1.00
2014  3 20 15 30    46.430 40.8773  27.8578   6.660   9.9  0  0  0      1
Site7S 5.938 1.00
Site1S 6.202 1.00
Site6S 7.728 1.00

or, try
Code:
awk '$1 !=  "2014"    {print $1$4, $2, $3; next}
     1
    ' file

I use the command

Code:
awk -f sc.awk pha.dat > dnm.out

Did not work!
What is the correct command to run awk script?
# 7  
Old 08-18-2014
Why did it not work, what error did you receive if any? What exactly is the content of sc.awk?

The -f flag is the correct flag to invoke an awk script from the command line. Also just to point out with regards to the method being used in the awk script, it will not retain the original spacing.
Login or Register to Ask a Question

Previous Thread | Next Thread

10 More Discussions You Might Find Interesting

1. Shell Programming and Scripting

What's wrong with this while loop?

function get_tablespace() { ## Get the current size of the tablespace size=`su -l oracle -c 'db-control report' |egrep "DATA_TBS" | awk '{print $5}'|tr -d '%'` ## Loop through until the size is 82 or less count=0 while && do ... (2 Replies)
Discussion started by: bille
2 Replies

2. Shell Programming and Scripting

awk loop using array:wish to store array values from loop for use outside loop

Here's my code: awk -F '' 'NR==FNR { if (/time/ && $5>10) A=$2" "$3":"$4":"($5-01) else if (/time/ && $5<01) A=$2" "$3":"$4-01":"(59-$5) else if (/time/ && $5<=10) A=$2" "$3":"$4":0"($5-01) else if (/close/) { B=0 n1=n2; ... (2 Replies)
Discussion started by: klane
2 Replies

3. Shell Programming and Scripting

Why result is wrong here ? whether break statement is wrong ?

Hi ! all I am just trying to check range in my datafile pls tell me why its resulting wrong admin@IEEE:~/Desktop$ cat test.txt 0 28.4 5 28.4 10 28.4 15 28.5 20 28.5 25 28.6 30 28.6 35 28.7 40 28.7 45 28.7 50 28.8 55 28.8 60 28.8 65 28.1... (2 Replies)
Discussion started by: Akshay Hegde
2 Replies

4. UNIX for Dummies Questions & Answers

Loop and variable not exactly variable: what's wrong

Hello guys, This truly is a newbie question. I'm trying to make a loop to execute simultaneous commands indefinitely while using variable. Here is how my mess looks like (this is just an example): #!/bin/bash IP=`shuf -n 1 IP.txt` # I figured this would be easier to select random lines... (4 Replies)
Discussion started by: bobylapointe
4 Replies

5. Shell Programming and Scripting

what's wrong with that loop ?

hello everybody, here's my code mkf () { INDEX=0; while ; do touch "file$1.f"; INDEX=$INDEX+1; done } when I type mkf 10 the loop seems to act infinite and only the last file of the loop is created, in the example below, there just is file10.f in... (11 Replies)
Discussion started by: Oddant
11 Replies

6. Shell Programming and Scripting

Whats wrong with my Loop

Hi all, I have been given a task to search for strings in a file that is encoded. I need to display the file name only when all the 3 strings which i provide are present in the file name. i first try to get a list of files according from the directory according to the value passed in argument... (0 Replies)
Discussion started by: amit1_x
0 Replies

7. Shell Programming and Scripting

Something wrong with while loop

Hi there, i've written a script to extract a portion of a MySQL database table and convert it to CSV and then to import it back as CSV to MySQL. Initially it worked without the while loop but after adding the while loop statement, i am getting the following error: ./export-csv-coordinates.sh:... (4 Replies)
Discussion started by: edge80
4 Replies

8. Shell Programming and Scripting

What is wrong in my IF loop ??

What is wrong in my IF loop if then echo " The request is authenticated " fi The error im getting is $ ./routing.sh server enables ********************************************************************** Preparing to service the request for Device server in Question... (9 Replies)
Discussion started by: raghunsi
9 Replies

9. Shell Programming and Scripting

Something went wrong in the following loop

The script is And the error is + count=2 ./FindEID.ksh: line 227: syntax error near unexpected token `else' ./FindEID.ksh: line 227: ` else' I just can't find out what the problem is, can anyone tell me about this error is? Thank you (5 Replies)
Discussion started by: tpltp
5 Replies

10. Shell Programming and Scripting

new to shell scripting: whats wrong with my if loop

#!/bin/bash for file in $HOME/*; do if ; then rm -i $file > /dev/null echo "$?" echo "$file has been deleted" fi done Been trying to learn shell scripting for a week or so now, when i run the script it doesnt display an error message, seems like it runs fine, however it doesnt delete... (10 Replies)
Discussion started by: stride6
10 Replies
Login or Register to Ask a Question