How to print 1st field and last 2 fields together and the rest of the fields after it using awk?


 
Thread Tools Search this Thread
Top Forums Shell Programming and Scripting How to print 1st field and last 2 fields together and the rest of the fields after it using awk?
# 1  
Old 06-25-2013
How to print 1st field and last 2 fields together and the rest of the fields after it using awk?

Hi experts,

I need to print the first field first then last two fields should come next and then i need to print rest of the fields.

Input :
Code:
a1,abc,jsd,fhf,fkk,b1,b2
a2,acb,dfg,ghj,b3,c4
a3,djf,wdjg,fkg,dff,ggk,d4,d5

Expected output:
Code:
a1,b1,b2,abc,jsd,fhf,fkk
a2,b3,c4,acb,dfg,ghj
a3,d4,d5,djf,wdjg,fkg,dff,ggk


I got how to print the first and last two fields together ,but not sure how to print the rest of the fields after this

Code:
 
awk -F ',' '{
print $1,$(NF-1),$NF}' infile

# 2  
Old 06-25-2013
Code:
$ awk -F"," '{i=$(NF-1);j=$NF;for(k=NF;k>=4;k--){$k=$(k-2);};$2=i;$3=j} {print $0}' aak
a1 b1 b2 abc jsd fhf fkk
a2 b3 c4 acb dfg ghj
a3 d4 d5 djf wdjg fkg dff ggk


Last edited by rajamadhavan; 06-25-2013 at 05:53 AM..
This User Gave Thanks to rajamadhavan For This Post:
# 3  
Old 06-25-2013
Code:
awk -F, '{A=$1","$(NF-1)","$NF;sub($(NF-1)","$NF,"");$1=A}1' OFS="," file


Last edited by pamu; 06-25-2013 at 05:20 AM.. Reason: corrected
This User Gave Thanks to pamu For This Post:
# 4  
Old 06-25-2013
Code:
$ sed "s/\([^,]*\)\(.*\)\(,[^,]*,.*\)$/\1\3\2/" file
a1,b1,b2,abc,jsd,fhf,fkk
a2,b3,c4,acb,dfg,ghj
a3,d4,d5,djf,wdjg,fkg,dff,ggk

This User Gave Thanks to anbu23 For This Post:
# 5  
Old 06-25-2013
Another approach:
Code:
awk -F, '{$1=$1 FS $(NF-1) FS $NF}NF=NF-2' OFS=, file

This User Gave Thanks to Franklin52 For This Post:
# 6  
Old 06-25-2013
python

Code:
with open("a.txt") as f:
 for line in f:
  line=line.replace("\n","")
  words=line.split(",")
  words=[words[0]]+words[len(words)-2:]+words[1:len(words)-2]
  print(",".join(words))


Last edited by Franklin52; 06-25-2013 at 06:00 AM.. Reason: Code tags
This User Gave Thanks to summer_cherry For This Post:
# 7  
Old 06-25-2013
Thank you all for your valuable inputs it helped me.
Login or Register to Ask a Question

Previous Thread | Next Thread

10 More Discussions You Might Find Interesting

1. Shell Programming and Scripting

awk to print lines based on text in field and value in two additional fields

In the awk below I am trying to print the entire line, along with the header row, if $2 is SNV or MNV or INDEL. If that condition is met or is true, and $3 is less than or equal to 0.05, then in $7 the sub pattern :GMAF= is found and the value after the = sign is checked. If that value is less than... (0 Replies)
Discussion started by: cmccabe
0 Replies

2. Shell Programming and Scripting

awk to combine all matching fields in input but only print line with largest value in specific field

In the below I am trying to use awk to match all the $13 values in input, which is tab-delimited, that are in $1 of gene which is just a single column of text. However only the line with the greatest $9 value in input needs to be printed. So in the example below all the MECP2 and LTBP1... (0 Replies)
Discussion started by: cmccabe
0 Replies

3. Shell Programming and Scripting

Print . in blank fields to prevent fields from shifting

The below code works great, kindly provided by @Don Cragun, the lines in bold print the current output. Since some of the fields printed can be blank some of the fields are shifted. I can not seem too add . to the blank fields like in the desired output. Basically, if there is nothing in the field... (10 Replies)
Discussion started by: cmccabe
10 Replies

4. Shell Programming and Scripting

awk sort based on difference of fields and print all fields

Hi I have a file as below <field1> <field2> <field3> ... <field_num1> <field_num2> Trying to sort based on difference of <field_num1> and <field_num2> in desceding order and print all fields. I tried this and it doesn't sort on the difference field .. Appreciate your help. cat... (9 Replies)
Discussion started by: newstart
9 Replies

5. UNIX for Dummies Questions & Answers

Remove zeros from first field, but print all fields

Hello Everyone, I've got a comma-delimited file that looks like this: 0012,123 ,456 ,05/12/2014 0123,525 ,286 ,05/12/2014 0456,791 ,300 ,05/12/2014 1095,759 ,300 ,05/12/2014 1344,576 ,292 ,05/12/2014 1558,551 ,283 ,05/12/2014 002183719, , ... (9 Replies)
Discussion started by: Scottie1954
9 Replies

6. Shell Programming and Scripting

awk - compare 1st 15 fields of record with 20 fields

I'm trying to compare 2 files for differences in a selct number of fields. When differnces are found it will write the whole record of the second file including appending '|C' out to a delta file. Each record will have 20 fields, but only want to do comparison of 1st 15 fields. The 1st field of... (7 Replies)
Discussion started by: sljnk
7 Replies

7. Shell Programming and Scripting

awk to split one field and print the last two fields within the split part.

Hello; I have a file consists of 4 columns separated by tab. The problem is the third fields. Some of the them are very long but can be split by the vertical bar "|". Also some of them do not contain the string "UniProt", but I could ignore it at this moment, and sort the file afterwards. Here is... (5 Replies)
Discussion started by: yifangt
5 Replies

8. Shell Programming and Scripting

How to Print from nth field to mth fields using awk

Hi, Is there any short method to print from a particular field till another filed using awk? Example File: File1 ==== 1|2|acv|vbc|......|100|342 2|3|afg|nhj|.......|100|346 Expected output: File2 ==== acv|vbc|.....|100 afg|nhj|.....|100 (8 Replies)
Discussion started by: machomaddy
8 Replies

9. Shell Programming and Scripting

awk - print all fields except for last field

How do I print all the fields of a record except for the $(NF) field? (4 Replies)
Discussion started by: locoroco
4 Replies

10. Shell Programming and Scripting

Compare Tab Separated Field with AWK to all and print lines of unique fields.

Hi. I have a tab separated file that has a couple nearly identical lines. When doing: sort file | uniq > file.new It passes through the nearly identical lines because, well, they still are unique. a) I want to look only at field x for uniqueness and if the content in field x is the... (1 Reply)
Discussion started by: rocket_dog
1 Replies
Login or Register to Ask a Question