Printing from col x to end of line, except last col


 
Thread Tools Search this Thread
Top Forums Shell Programming and Scripting Printing from col x to end of line, except last col
# 1  
Old 01-07-2013
Printing from col x to end of line, except last col

Hello,

I have some tab delimited data and I need to move the last col. I could hard code it,

awk '{ print $1,$NF,$2,$3,$4,etc }' infile > outfile

but it would be nice to know the syntax to print a range cols.

I know in cut you can do,

cut -f 1,4-8,11-

to print fields 1, 4,5,6,7,8, and from 11 to the end of the line, but I don't know if cut has a variable for the last col like $NF.

Since I am moving $NF from the end, it shouldn't be printed again, but that complexifys things a bit more. If it was printed again, it would be easy enough to get rid of it in a second step, but it seems as if there should be a straightforward way to do this in one step.

Suggestions are appreciated,

LMHmedchem
# 2  
Old 01-07-2013
As far as I know awk doesn't have a syntax to print a range of cols.

awk can cheat by letting you assign to special variables, though.

Code:
awk '{
        $2=$NF" "$2; # Squeeze an extra column into column 2
        NF=5; # Limit it to 5 columns
       } 1 # Print everything'

This User Gave Thanks to Corona688 For This Post:
# 3  
Old 01-07-2013
also, using Corona688's example for moving last column and keeping tab delimiters, try:
Code:
awk -F"\t" '{ $2=$NF OFS $2; NF--; } 1 ' OFS="\t" input

This User Gave Thanks to rdrtx1 For This Post:
# 4  
Old 01-07-2013
Thanks, this appears to be working. I am also trying to replace the first instance of "C0014" with "class". It seems like either of these should work,

sed 's/C0014/class/1'
sed 's/C0014/class/'

but both are replacing all instances of C0014 with class, as if I was using /g.

What am I missing here?

LMHmedchem
# 5  
Old 01-07-2013
Assuming the awk script is also being used to do the replace, try:
Code:
awk -F"\t" '{ if (!r) r=sub("C0014","class"); $2=$NF OFS $2; NF--; } 1 ' OFS="\t" input

This User Gave Thanks to rdrtx1 For This Post:
# 6  
Old 01-07-2013
Thanks, that worked fine and it's nice to have it in one step. Do you have any idea why the sed command doesn't work?

I was a bit unclear and I need to pass in a value for the string that will be replaced by "class", meaning it will not be C0014 every time.

Code:
SETS="C0014"
awk -F"\t" '{ if (!r) r=sub("$SETS","class"); $2=$NF OFS $2; NF--; } 1 ' OFS="\t"  'pass_'$SETS'_filter_.txt'  >  PASS1.txt

this does not work, so I guess I need to assign the value of $SETS to an awk variable???

LMHmedchem

Last edited by Franklin52; 01-08-2013 at 03:43 AM.. Reason: Please use code tags for data and code samples
# 7  
Old 01-07-2013
in the awk script, try:
Code:
SETS="C0014"
awk -F"\t" -v sets="$SETS" '{ if (!r) r=sub(sets,"class"); $2=$NF OFS $2; NF--; } 1 ' OFS="\t" 'pass_'$SETS'_filter_.txt'

The sed script above:
Code:
sed 's/C0014/class/' file

should replace first occurrence in every line.
Login or Register to Ask a Question

Previous Thread | Next Thread

10 More Discussions You Might Find Interesting

1. Shell Programming and Scripting

Matrix to 3 col sorted

Hello experts, I have matrices sorted by position, there are 400k rows, 3000 columns. ID CHR POS M1 M2 M3 M4 M5 ID1 1 1 4.6 2.6 2.1 3.5 4.2 ID2 1 100 3.6 2.9 3.2 2.6 2.5 ID3 1 1000 4.1... (9 Replies)
Discussion started by: senhia83
9 Replies

2. Shell Programming and Scripting

Merge files by col value

Hi, Please help, this is quite complex, I dont know how to start. The original input files are 10mb in size each. I have multiple files and I want to merge them in the following way. Every file has 4 columns. Col1 and col2 are fixed with respect to each other. In the example value A... (2 Replies)
Discussion started by: alpesh
2 Replies

3. Shell Programming and Scripting

Modifying col values based on another col

Hi, Please help with this. I have several excel files (with and .xlsx format) with 10-15 columns each. They all have the same type of data but the columns are not ordered in the same way. Here is a 3 column example. What I want to do add the alphabet from column 2 to column 3, provided... (9 Replies)
Discussion started by: newbie83
9 Replies

4. Shell Programming and Scripting

Retrieving data from 65th col (of each line) ?

Hello Friends, I am in situation where I have to note down few SQL queries from specific hexdump format. Here is an example (the query text starts at 65th character on each line) ---------------------- 0x000007FEB0E701C0 : 7365 6C65 6374 2063 7573 746E 6F2C 2020 select custno, ... (9 Replies)
Discussion started by: Sunusernewbie
9 Replies

5. UNIX for Advanced & Expert Users

Print line based on highest value of col (B) and repetion of values in col (A)

Hello everyone, I am writing a script to process data from the ATP world tour. I have a file which contains: t=540 y=2011 r=1 p=N409 t=540 y=2011 r=2 p=N409 t=540 y=2011 r=3 p=N409 t=540 y=2011 r=4 p=N409 t=520 y=2011 r=1 p=N409 t=520 y=2011 r=2 p=N409 t=520 y=2011 r=3 p=N409 The... (4 Replies)
Discussion started by: imahmoud
4 Replies

6. Shell Programming and Scripting

i can't cut the third col

SW_dist_intr false Enable SW distribution of interrupts True autorestart true Automatically REBOOT OS after a crash True boottype disk N/A False capacity_inc 1.00 ... (7 Replies)
Discussion started by: maxim42
7 Replies

7. Ubuntu

Match col 1 of File 1 with col 1 File 2 and create a 3rd file

Hello, I have a 1.6 GB file that I would like to modify by matching some ids in col1 with the ids in col 1 of file2.txt and save the results into a 3rd file. For example: File 1 has 1411 rows, I ignore how many columns it has (thousands) File 2 has 311 rows, 1 column Would like to... (7 Replies)
Discussion started by: sogi
7 Replies

8. UNIX for Dummies Questions & Answers

Info about col command

Hello every1. Can any1 help me with the col command. Wat is a reverse line feed. Which kind of files u need to use the col command. (2 Replies)
Discussion started by: rahulrathod
2 Replies

9. Shell Programming and Scripting

Setting Col size

I have a variable in a shell script which is more than 80 characters. 1) I log into SQL plus and populate a variable using 3 queries appended by ,' comma'. ORAINFO=`sqlplus -s << ! / as sysdba set feedback off set heading off select LOG_MODE... (2 Replies)
Discussion started by: yerra
2 Replies

10. UNIX for Advanced & Expert Users

Help On col command

Hello Can Any1 tell me the difference between the col command and the col command with the -f option. I tried running both of them but i can't see any difference. Please guide me. (1 Reply)
Discussion started by: rahulrathod
1 Replies
Login or Register to Ask a Question