awk - treating remaining columns as one


 
Thread Tools Search this Thread
Top Forums Shell Programming and Scripting awk - treating remaining columns as one
# 15  
Old 11-14-2012
Quote:
Originally Posted by Scrutinizer
@cts. bala@ the difference occurs not because of awk versions but because you are using different different data samples. With bala's data sample this part of ctsgnb's code is problematic: sub(".*"$3,$3) , which matches upto the last occurence of "this", because of greedy matching..



--
@cts: nice sed/xargs
@bala: thanks Smilie

@Scruti

Ah ok ... i got it now (gush!, how did i miss it !) Smilie , thx !

By the way, in the code:

Code:
awk '{$1=$1; sub(FS,RS); sub(FS,RS)}1' infile

The $1=$1 is not necessary, is it ?

Last edited by ctsgnb; 11-14-2012 at 04:18 AM..
# 16  
Old 11-14-2012
The $1=$1 is not strictly necessary with the sample provided, but it gives the script robustness since if the data were to include TABs or multiple spaces or if there were a space before the first field, then it might break otherwise...
# 17  
Old 11-14-2012
Hi Scruti,

Ok, so you mean using $1=$1 trim blank stuff around the retained $1 ? or do i understand it in a wrong way ?

Do you have a short example just to illustrate what you mean ?

Thank in advance for your time & for your help
# 18  
Old 11-14-2012
Yes the $1=$1 trims the blanks, so that we can be sure there is no leading whitespace and and only a single space separating the fields, so that the subs can be successful..


For example:
Code:
$ printf 'alpha 200 this is a comment for this record\n' | awk '{sub(FS,RS); sub(FS,RS)}1'
alpha
200
this is a comment for this record
$ printf '  alpha \t 200   this is a comment for this record\n' | awk '{sub(FS,RS); sub(FS,RS)}1'


alpha 	 200   this is a comment for this record
$ printf '  alpha \t 200   this is a comment for this record\n' | awk '{$1=$1; sub(FS,RS); sub(FS,RS)}1'
alpha
200
this is a comment for this record

This User Gave Thanks to Scrutinizer For This Post:
# 19  
Old 11-14-2012
could you please explain how does the below code works ?

sub(FS,RS); sub(FS,RS)

Code:
 
 
awk '{$1=$1; sub(FS,RS); sub(FS,RS)}1' infile

# 20  
Old 11-14-2012
Quote:
Originally Posted by only4satish
could you please explain how does the below code works ?

sub(FS,RS); sub(FS,RS)
sub(FS,RS) substitue the Field Separator (whose default value is a space " ") with a Record Separator (whose default value is a newline "\n")

It does this substitution only once , so the first FS met is changed into a RS.
That is the reason why it is important to make sure that the first FS encountered is one between the fist field $1 and second field $2.
# 21  
Old 11-15-2012
# cat t1
1 2 This is a comment

Code:
awk '{a=$1"\n"$2;sub(".*"$3,$3);print a"\n"$0}'  t1


sub(".*"$3,$3) replace in the current line ($0) everthing before and including $3 by the current value of $3
print a"\n"$0 print the variable a and the current line separated by a new line

by refering above file t1,current value of $3 is 'this' right ? , i am bit confused,could you please explain hw does this code works
Code:
sub(".*"$3,$3)

, will it returns the value 'this' or 'This is a comment'

please help me ............i am a newbie ..................

---------- Post updated at 06:34 PM ---------- Previous update was at 04:45 PM ----------

got it....
looks like above code does not give desired results, if the file contains string (this)which is repeated as below

# cat t1
1 2 This is a comment this is not a comment this this1

Code:
awk '{a=$1"\n"$2;sub(".*"$3,$3);print a"\n"$0}' t1

Login or Register to Ask a Question

Previous Thread | Next Thread

9 More Discussions You Might Find Interesting

1. Shell Programming and Scripting

Awk: duplicate column and print remaining as is

Hello there I'd like to make a copy of 2nd column and have it printed in place of column 1. Remaining columns are needed as it. test data: ProbeSet GeneSymbol X22565285 X22566285 ILMN_1050008 MYOCD 6.577 7.395 ILMN_1050014 GPRC6A 6.595 6.668 ILMN_1050017 ... (2 Replies)
Discussion started by: genome
2 Replies

2. Shell Programming and Scripting

AIX to RHEL migration - awk treating 0e[0-9]+ as 0 instead of string issue

Greetings Experts, We are migrating from AIX to RHEL Linux. I have created a script to verify and report the NULLs and SPACEs in the key columns and duplicates on key combination of "|" delimited set of big files. Following is the code that was successfully running in AIX. awk -F "|" 'BEGIN {... (5 Replies)
Discussion started by: chill3chee
5 Replies

3. Shell Programming and Scripting

awk treating variables differently in UNIX-Linux

Hi, awk seem to be acting differently in Unix and Linux when it comes to formatting. This is making it difficult to migrate scripts. for example: UNIX: echo "123" |awk '{printf ("%05s\n" ,$1)}' 00123 echo "123" |awk '{printf ("%05d\n" ,$1)}' 00123 echo "S12" |awk '{printf ("%05s\n"... (9 Replies)
Discussion started by: wanderingmind16
9 Replies

4. Shell Programming and Scripting

Comparison treating strings as zero integers

I'm trying to write a bash script to perform basic arithmetic operations but I want to run a comparison on the arguments first to check that they're a number greater than zero. I want an error to pop up if the arguments args aren't >= 0 so I have: if ! ]; then echo "bad number: $1" fi ... (14 Replies)
Discussion started by: TierAngst
14 Replies

5. Shell Programming and Scripting

treating multiple delimiters[solved]

Hi, I need to display the last column value in the below o/p. sam2 PS 03/10/11 0 441 Unable to get o/p with this awk code awk -F"+" '{ print $4 }' pwdchk.txt I need to display 441(in this eg.) and also accept it as a variable to treat it with if condition and take a decision.... (1 Reply)
Discussion started by: sam_bd
1 Replies

6. Shell Programming and Scripting

Treating string as date ?

Is there a way to treat a string as date and compare it to the current date? lets assum inpu lik $ cat myfile Name Last login ************************** Sara 2/13/2012 kalpeer 2/15/2012 ygemici 2/14/2012 we want to display the name who logged in during the last #... (4 Replies)
Discussion started by: Sara_84
4 Replies

7. Shell Programming and Scripting

Treating Strings with spaces

I have a file list.txt which has a list of file names with spaces between the file names like /emptydir/file 1 how do i browse through the list.txt displaying the filenames. Almost all the file names in list.txt have space between them.This file list.txt is formed by using the find statement to... (5 Replies)
Discussion started by: kinny
5 Replies

8. Shell Programming and Scripting

TRAP treating

Hi, I'm looking for a script that receives the traps from a windows machine and treate them. For exemple just write a line in a file on UNIX server. Can you help me ? Thank you. (2 Replies)
Discussion started by: big123456
2 Replies

9. Shell Programming and Scripting

treating special chars

Hi, I need some advise on treating non printable chars over ascii value 126 Case 1 : On some fields in the text , I need to retiain then 'as-is' and load to a database.I understand it also depends on database codepage. but i just wanna know how do i ensure it do not change while loading... (1 Reply)
Discussion started by: braindrain
1 Replies
Login or Register to Ask a Question