![]() |
Hello and Welcome from United States to the UNIX and Linux Forums! Thank You for Visiting and Joining Our Global Community.
|
|
google unix.com
|
|||||||
| Forums | Register | Forum Rules | Links | Albums | FAQ | Members List | Calendar | Search | Today's Posts | Mark Forums Read |
| Shell Programming and Scripting Post questions about KSH, CSH, SH, BASH, PERL, PHP, SED, AWK and OTHER shell scripts and shell scripting languages here. |
More UNIX and Linux Forum Topics You Might Find Helpful
|
||||
| Thread | Thread Starter | Forum | Replies | Last Post |
| How to convert a single column into several rows and columns? | ashton_smith | UNIX for Dummies Questions & Answers | 5 | 05-24-2008 05:44 PM |
| shell script required to convert rows to columns | suresh3566 | Shell Programming and Scripting | 2 | 05-07-2008 06:25 AM |
| How to check Null values in a file column by column if columns are Not NULLs | Mandab | Shell Programming and Scripting | 7 | 03-15-2008 09:57 AM |
| single column to multiple columns | agibbs | UNIX for Dummies Questions & Answers | 7 | 12-05-2007 10:04 PM |
| Print last 4 columns (variable column #) | Da_Duck | UNIX for Dummies Questions & Answers | 19 | 02-27-2004 10:33 AM |
![]() |
|
|
LinkBack | Thread Tools | Search this Thread | Rate Thread | Display Modes |
|
|
|
||||
|
Convert two column data into 8 columns
Apologies if this has been covered - I did search but couldn't find what I was looking for.
I have a simple X-Y input file. I want to convert it from two columns into 8 columns - 4 pairs of X-Y data. So my input file looks like X1 Y1 X2 Y2 X3 Y3 X4 Y4 X5 Y5 etc And I want it to look like this X1 Y1 X2 Y2 X3 Y3 X4 Y4 X5 Y5 X6 Y6 etc. I would prefer this to be in specfic format - 8 characters per column. But if that is not possible, each field can be separated with commas. I thought awk with a printf would be the best way to make this happen, but I can't get it to work. |
|
||||
|
Worked like a charm - thanks!!
Could you briefly explain what the stuff following the prinf means? With printf, it seems you're printing column 1 and 2 side by side of 8 characters per column. Then it seems you're repeating this 4 times to get the next 3 sets of data. But how does it create a new line once 4 sets of data have been printed across? |
|
||||
|
Here is the code spread out a bit more for readability, with line numbers proceeding so I can reference.
Code:
1: printf("%8s%8s",$1,$2);
2: a+=1;
3: if ( a%4 == 0)
4: print "";
Line1: This prints out columns 1 and 2 ($1 and $2) of the input line ... the '%8s' means they get printed out in 8 character columns left padded with spaces. Line 2: Once the line has been read and the first 2 columns have been printed we increment a counter by one. Line 3: This test to see if our counter variable (the one we just incremented) is a multiple of 4 or not. the '%' operator returns the remainder after dividing the 1st argument (a) by the second (4). Line 4: So if the remainder of "a/4" is zero (ie. it is divisible by 4) then we print a new line. The reason this works is that the 'print' command always prints a new line character as opposed to the printf command which doesn't. This has the effect of printing a new line every 4 lines of input. Hope that helps ... |
|
||||
|
Quote:
Awk already has NR. Also, Awk isn't C. No ";" is needed after 'print ""'. Code:
awk '{printf "%8s%8s",$1,$2;if ( NR%4 == 0) print ""}'
|
![]() |
| Bookmarks |
| Thread Tools | Search this Thread |
| Display Modes | Rate This Thread |
|
|