awk - OFS printing duplicate. Why?


 
Thread Tools Search this Thread
Top Forums Shell Programming and Scripting awk - OFS printing duplicate. Why?
# 1  
Old 03-31-2015
awk - OFS printing duplicate. Why?

Why the following code printing duplicate records?

bash-4.1$ cat rm1
Code:
        c1      c2      c3
l1      2       3       4
l2      2       3       2

bash-4.1$ awk '{print $0} OFS = "\n"' rm1
Code:
        c1      c2      c3
        c1      c2      c3
l1      2       3       4
l1      2       3       4
l2      2       3       2
l2      2       3       2

# 2  
Old 03-31-2015
The awk script:
Code:
awk '{print $0} OFS = "\n"' file

can be more clearly written in this case as:
Code:
awk '
	{print $0}
OFS = "\n"
' file

Since there is no condition on the line {print $0} the action is performed for every input line. And, since the condition on the next line (OFS = "\n") evaluates to a non-zero value for every line read, the default action ({print $0}) is also performed for every input line. Therefore, your script prints every line twice.

If you're trying to print each input field as a separate output line, you need to do something to cause the input line to be re-evaluated; perhaps you intended something like:
Code:
awk '{$1 = $1}1' OFS="\n" file

Note that the OFS="\n" is outside the single quotes and the spaces around the equal sign have to be removed when using this form.
This User Gave Thanks to Don Cragun For This Post:
# 3  
Old 03-31-2015
@Akshay: Oh i have no problem with the code. However, I would like to understand the logic behind duplicate records. Smilie
@Don: Hi DOn, Thanks. Could you please explain the logic behind. Also how did you manage to put "small code tags" ?
Code:
'{$1 = $1}1'


Last edited by quincyjones; 03-31-2015 at 06:58 AM..
# 4  
Old 03-31-2015
Thanks but what about this ?
Code:
'{$1 = $1}1'

# 5  
Old 03-31-2015
Quote:
Originally Posted by quincyjones
... ... ...
@Don: Hi Don, Thanks. ... ... ... Also how did you manage to put "small code tags" ?
Code:
'{$1 = $1}1'

I'm not sure what you mean by "small code tags", but the button marked </> at the far right at the top of your editing screen when editing or creating a new post produces [ICODE] and [/ICODE] tags which use the same font and background color used by the [CODE] and [/CODE] tags, but do not force a line break.
This User 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

OFS does not apply to few records in awk

Hi , I am having a problem with my awk oneliner , which for some reason leaves the first two records Input File $ cat file1 A1:B1:C1:NoLimit M1:M2:M3:Limit A2:B2:C2,C3,C4,C5 A3:B3:C3,C4,C5,C6,C7Desired output A1,B1,C1,NoLimit M1,M2,M3,Limit A2,B2,C2 ,,,C3 ,,,C4 ,,,C5 A3,B3,C3... (5 Replies)
Discussion started by: chidori
5 Replies

2. Shell Programming and Scripting

OFS print awk

file: sasa|asasa|asasa|asas erer|Erer|rere|ererer Output needed : sasa:asasa:asasa:asas erer:Erer:rere:ererer Im getting output, when i use the $1,$2. awk -F'|' 'BEGIN{OFS=":";} {print $1,$2; }' file Output : sasa:asasa erer:Erer But when i need the whole column, i... (5 Replies)
Discussion started by: Ramesh M
5 Replies

3. UNIX for Dummies Questions & Answers

OFS in awk

Hello, I have an issue with adding commas as delimiters in this scenario: cat xtr3.rpl|head -5|awk 'BEGIN {OFS=","} {print $1,$2,$3,$4}' Produces this output: 00530083,0000000471,000000000000.00,000000000000.00 00530085,0000000471,000000000000.00,000000000000.00... (10 Replies)
Discussion started by: MIA651
10 Replies

4. Shell Programming and Scripting

Awk OFS issues

Hi, Could anyone tell me what Im doing wrong here any help will be much appreciated #!/bin/bash ls -ltr /export/home/tjmoore > /export/home/tjmoore/log100 awk -F " " /export/home/tjmoore/log100 'BEGIN {OFS="\t";} {print $1,$2,$3,$4,$5, $6,$7,$8,$9;}' > /export/home/tjmoore/log1001 I... (9 Replies)
Discussion started by: 02JayJay02
9 Replies

5. Shell Programming and Scripting

Awk OFS issues

Hi Im trying to tidy up the output of a who command when it writes to a log, everything I've tried doesnt seem to work though, any help would be massively appreciated. Im using the awk command to set the OFS as tab. #!/bin/bash who >> /export/home/tjmoore/logusers awk -F 'BEGIN... (3 Replies)
Discussion started by: 02JayJay02
3 Replies

6. UNIX for Dummies Questions & Answers

Problem with AWK and OFS

I have a file that looks like this: Infile.seq I want to output the DNA sequence and add the filename as the identifier. The output file should look like this: I am using the following code but I do not understand why the sequence is not in the output: awk 'BEGIN { RS =... (11 Replies)
Discussion started by: Xterra
11 Replies

7. Shell Programming and Scripting

Parsing XML in awk : OFS does not work as expected

Hi, I am trying to parse regular XML file where I have to reduce number of decimal points in some xml elements. I am using following AWK command to achive that : #!/bin/ksh EDITCMD='BEGIN { FS = ""; OFS=FS } { if ( $3 ~ "*\\.*" && length(substr($3,1+index($3,"."))) == 15 ) {... (4 Replies)
Discussion started by: martin.franek
4 Replies

8. Shell Programming and Scripting

AWK - OFS

Hi All, I have a comma seperated delimited file with 10 columns. I need to convert it into TAB seperated delimited file. awk -F"," '{print $1"\t"$2"\t"$3"\t"$4"\t"$5"\t"$6"\t"$7"\t"$8"\t"$9"\t"$10}' a.txt >> b.txt how to use OFS to get the same output. I have tried by googling, but it... (5 Replies)
Discussion started by: Amit.Sagpariya
5 Replies

9. Shell Programming and Scripting

OFS in awk.

OFS is inbuild command in awk. I have a file file.txt abc : def : ghi jkl : mno: pqr stu : vwx :yzz code i used: awk -F ":" 'BEGIN {OFS="|"} {print $1,$2}' file.txt output: abc def jkl mno stu vwx but as i have used OFS="|" and i am expecting output as: abc | def jkl... (4 Replies)
Discussion started by: salil2012
4 Replies

10. UNIX for Dummies Questions & Answers

OFS in awk

Hi, I have these out put field seperator changed to "|" in my awk command, but it didn't give me the result. Can someone help me find out why? ======================================= /bin/awk 'BEGIN { OFS="|" } { print $0 }' list.tmp.$$ > listtmp.$$ =======================================... (1 Reply)
Discussion started by: whatsfordinner
1 Replies
Login or Register to Ask a Question