Awk doubt


 
Thread Tools Search this Thread
Top Forums Shell Programming and Scripting Awk doubt
# 1  
Old 12-30-2009
Awk doubt

I have a file sample.txt with the following contents:

Quote:
trap is a software interrupt
usually the result of an error condition.

default action when a process receives a signal is to terminate.

user may press the interrupt key or send a kill command to the process

In UNIX, any of these events can cause a signal

the following gives output as
Code:
awk 'NF{s=$0; print s}' sample.txt

Quote:
trap is a software interrupt
usually the result of an error condition.
default action when a process receives a signal is to terminate.
user may press the interrupt key or send a kill command to the process
In UNIX, any of these events can cause a signal
but,
Code:
awk 'NF{s=$0}{print s}' sample.txt

gives output as
Quote:
trap is a software interrupt
usually the result of an error condition.
usually the result of an error condition.
default action when a process receives a signal is to terminate.
default action when a process receives a signal is to terminate.
user may press the interrupt key or send a kill command to the process
user may press the interrupt key or send a kill command to the process
In UNIX, any of these events can cause a signal
why this difference, can someone explain me?
# 2  
Old 12-30-2009
To write your first line of code shorter, you can do:
Code:
awk 'NF' infile

There is no need to store anything in a variable; print is not needed in this case since the default action of awk is to print.


For your question what the difference is:
Code:
awk 'NF{s=$0}{print s}' sample.txt

In difference to your 1st line of code, this 2nd line does check for 2 conditions. The 1st is, that if there is a number of fields (NF) greater than zero, it will do the action in the curled brackets. It does this for every line of your input file. It also does this with all other actions and your next action for every line is to print the value of your variable s.
If s is not filled since NF was not true, it still has the former value stored and prints it. So it will give more output than the 1st command line where everything is inside one curled brackets.
With 1st command it will just pass the lines with NF being not true ie. pass the empty lines. In the 2nd command it will print out current value of s even if it hits a new line, since the second curled bracket has no condition in front of it and will always be executed.

I hope it was understandable Smilie

Last edited by zaxxon; 12-30-2009 at 07:09 AM.. Reason: Trying to explain better ^^
# 3  
Old 12-30-2009
Quote:
Originally Posted by zaxxon
To write your first line of code shorter, you can do:
Code:
awk 'NF' infile

There is no need to store anything in a variable; print is not needed in this case since the default action of awk is to print.
But zaxxon There is a need to store the $0 in a variable if the $0 contain spaces in the beginning ...the restoration process will eliminate the heading spaces if any.
# 4  
Old 12-30-2009
Hi Ahmad, I notice no difference if $0 is stored in a variable.
Code:
$ test="      First line\n\nThe  third     line \n"
$ printf "$test"
        First line

The  third     line

Code:
$ printf "$test" | awk NF
        First line
The  third     line

Code:
$ printf "$test" | awk 'NF{s=$0; print s}'
        First line
The  third     line


There is a difference if we do this to remove all whitespace:
Code:
$ printf "$test" | awk '$1=$1'
First line
The third line


Last edited by Scrutinizer; 12-30-2009 at 11:39 AM.. Reason: Added lost quotes, thanks alister
# 5  
Old 12-30-2009
Quote:
Originally Posted by royalibrahim
why this difference, can someone explain me?
The difference:

Code:
awk 'NF{s=$0; print s}' sample.txt

This command prints the variable s if the current line contains one or more fields, the print command is within the same brace (block).

Code:
awk 'NF{s=$0}{print s}' sample.txt

This command prints the variable s even if the current line is blanc (print command in a separate block).
If the current line is blanc it prints the previous line s.

Hope this helps
# 6  
Old 12-30-2009
Quote:
Originally Posted by Scrutinizer
Code:
$ test="      First line\n\nThe  third     line \n"
$ printf $test
        First line

The  third     line

I'm assuming either IFS has been modified from its usual value or double-quotes around $test were lost while pasting, as that result is not what one would expect from a typical shell environment.

Regards,
alister

Last edited by alister; 12-30-2009 at 11:35 AM..
# 7  
Old 12-30-2009
Correct! The "" somehow did not make it. I'll correct the post.
Login or Register to Ask a Question

Previous Thread | Next Thread

10 More Discussions You Might Find Interesting

1. Shell Programming and Scripting

Doubt in awk

Hi, I got a below requirement from this forum, but the solution provided was not clear. Below is the requirement Input file A 1 Z A 1 ZZ B 2 Y B 2 AA Required output B Y|AA A Z|ZZ (5 Replies)
Discussion started by: stew
5 Replies

2. Shell Programming and Scripting

Doubt on using AWK

DE_CODE|1{AXXANY}1APP_NAME|2{TELCO}2LOC|NY DE_CODE|1{AXXATX}1APP_NAME|2{TELCO}2LOC|TX DE_CODE|1{AXXABT}1APP_NAME|2{TELCO}2LOC|BT DE_CODE|1{AXXANJ}1APP_NAME|2{TELCO}2LOC|NJ i have out put file like below i have to convert it in the format as below. DE_CODE = AXXANY APP_NAME= TELCO LOC = NY... (4 Replies)
Discussion started by: mail2sant
4 Replies

3. UNIX for Dummies Questions & Answers

a doubt in awk

instead of writing print command in awk, i saw in some posts that we can simply write a number before we end the awk command and it will print the file. As given below: $awk '{some manipulation; print}' filename $awk '{some manipulation}1' filename I also tried replacing the... (2 Replies)
Discussion started by: PranavEcstasy
2 Replies

4. Shell Programming and Scripting

doubt on awk

I have executed the below command: find . -name "Ks*" -type f -exec ls -ltr {} \; | awk '{printf("%ld %s %d %s \n",$5,$6,$7,$8,$9)}' and here is the output: 1282 Oct 7 2004 51590 Jul 10 2006 921 Oct 7 2004 1389 Jun 4 2003 1037 May 19 2004 334 Mar 24 2004 672 Jul 8 2003 977... (6 Replies)
Discussion started by: venkatesht
6 Replies

5. Shell Programming and Scripting

doubt in awk

Hi , I have a file in the below format: 1.txt awk 'BEGIN { printf ("%1s", "man" )} ' awk 'BEGIN { printf ("%9s", "women" )} ' awk 'BEGIN { printf ("%56s", "human")} ' ## ### ## echo "$!" ## awk 'BEGIN { printf ("%1s", "aaa" )} ' awk 'BEGIN { printf ("%19s", "bbb" )} ' ... (4 Replies)
Discussion started by: jisha
4 Replies

6. Shell Programming and Scripting

AWK doubt

Hello people I have a doubt about awk... I´m using it to create a condition where I do not want to use the 0 (zero) value of a certain column. - This is the original file: string,number,date abc,0,20050101 def,1,20060101 ghi,2,20040101 jkl,12,20090101 mno,123,20020101... (2 Replies)
Discussion started by: Rafael.Buria
2 Replies

7. UNIX for Dummies Questions & Answers

doubt about awk

i have a file like this: awk.lst smith : sales : 1200 : 2 jones:it:25000 : 2 roger : it : 1500 : 2 ravi | acct | 15000 i have 3 doubts 1) when i say awk -F ":" '$2 ~ /'it'/ {print $0}' awk.lst i am not able to get jones in the ouput , is it because of space issue? 2)how to... (2 Replies)
Discussion started by: soujanya_srk
2 Replies

8. Shell Programming and Scripting

awk doubt

hi how to get the values in two columns (may be 2nd and 5th column) of a file line by line. either i want to get the two fields into different variables and use a for loop to get these values line by line. (3 Replies)
Discussion started by: Pradee
3 Replies

9. Shell Programming and Scripting

doubt in AWK

Hi all, column1 -------- 33 44 55 66 please provide the script using awk command to dispaly output 55. Help apperciated.. thanks, Nirmal (4 Replies)
Discussion started by: abnirmal
4 Replies

10. UNIX for Dummies Questions & Answers

awk doubt

I'm having a file with 5 fields. I want to sort that file according to one field no 3. How shall I do using awk programming. Any input appreciatable. regards, vadivel. (7 Replies)
Discussion started by: vadivel
7 Replies
Login or Register to Ask a Question